Merge "Update documentation" into udc-dev
diff --git a/core/api/current.txt b/core/api/current.txt
index a1fe0fe..e091b62 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -2037,6 +2037,8 @@
field public static final int system_on_tertiary_light;
field public static final int system_outline_dark;
field public static final int system_outline_light;
+ field public static final int system_outline_variant_dark;
+ field public static final int system_outline_variant_light;
field public static final int system_palette_key_color_neutral_dark;
field public static final int system_palette_key_color_neutral_light;
field public static final int system_palette_key_color_neutral_variant_dark;
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index 46f83cd..5a8ee94 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -13108,12 +13108,14 @@
method public int describeContents();
method public int getAudioChannel();
method @NonNull public java.util.List<android.service.voice.HotwordAudioStream> getAudioStreams();
+ method public int getBackgroundAudioPower();
method public int getConfidenceLevel();
method @NonNull public android.service.voice.DetectedPhrase getDetectedPhrase();
method @NonNull public android.os.PersistableBundle getExtras();
method public int getHotwordDurationMillis();
method public int getHotwordOffsetMillis();
method @Deprecated public int getHotwordPhraseId();
+ method public static int getMaxBackgroundAudioPower();
method public static int getMaxBundleSize();
method @Deprecated public static int getMaxHotwordPhraseId();
method public static int getMaxScore();
@@ -13124,6 +13126,7 @@
method public boolean isHotwordDetectionPersonalized();
method public void writeToParcel(@NonNull android.os.Parcel, int);
field public static final int AUDIO_CHANNEL_UNSET = -1; // 0xffffffff
+ field public static final int BACKGROUND_AUDIO_POWER_UNSET = -1; // 0xffffffff
field public static final int CONFIDENCE_LEVEL_HIGH = 5; // 0x5
field public static final int CONFIDENCE_LEVEL_LOW = 1; // 0x1
field public static final int CONFIDENCE_LEVEL_LOW_MEDIUM = 2; // 0x2
@@ -13143,6 +13146,7 @@
method @NonNull public android.service.voice.HotwordDetectedResult build();
method @NonNull public android.service.voice.HotwordDetectedResult.Builder setAudioChannel(int);
method @NonNull public android.service.voice.HotwordDetectedResult.Builder setAudioStreams(@NonNull java.util.List<android.service.voice.HotwordAudioStream>);
+ method @NonNull public android.service.voice.HotwordDetectedResult.Builder setBackgroundAudioPower(int);
method @NonNull public android.service.voice.HotwordDetectedResult.Builder setConfidenceLevel(int);
method @NonNull public android.service.voice.HotwordDetectedResult.Builder setDetectedPhrase(@NonNull android.service.voice.DetectedPhrase);
method @NonNull public android.service.voice.HotwordDetectedResult.Builder setExtras(@NonNull android.os.PersistableBundle);
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index 667ec7e..df8da24 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -5914,6 +5914,7 @@
/**
* A Parcelable[] of {@link ChooserAction} objects to provide the Android Sharesheet with
* app-specific actions to be presented to the user when invoking {@link #ACTION_CHOOSER}.
+ * You can provide as many as five custom actions.
*/
public static final String EXTRA_CHOOSER_CUSTOM_ACTIONS =
"android.intent.extra.CHOOSER_CUSTOM_ACTIONS";
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 61d8512..123f480 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -18632,7 +18632,7 @@
* The modes that can be used when disabling syncs to the 'config' settings.
* @hide
*/
- @IntDef(prefix = "DISABLE_SYNC_MODE_",
+ @IntDef(prefix = "SYNC_DISABLED_MODE_",
value = { SYNC_DISABLED_MODE_NONE, SYNC_DISABLED_MODE_PERSISTENT,
SYNC_DISABLED_MODE_UNTIL_REBOOT })
@Retention(RetentionPolicy.SOURCE)
@@ -18642,23 +18642,36 @@
/**
* Sync is not disabled.
*
+ * @deprecated use the constant in DeviceConfig
+ *
* @hide
*/
- public static final int SYNC_DISABLED_MODE_NONE = 0;
+ @Deprecated
+ public static final int SYNC_DISABLED_MODE_NONE = DeviceConfig.SYNC_DISABLED_MODE_NONE;
/**
* Disabling of Config bulk update / syncing is persistent, i.e. it survives a device
* reboot.
+ *
+ * @deprecated use the constant in DeviceConfig
+ *
* @hide
*/
- public static final int SYNC_DISABLED_MODE_PERSISTENT = 1;
+ @Deprecated
+ public static final int SYNC_DISABLED_MODE_PERSISTENT =
+ DeviceConfig.SYNC_DISABLED_MODE_PERSISTENT;
/**
* Disabling of Config bulk update / syncing is not persistent, i.e. it will not survive a
* device reboot.
+ *
+ * @deprecated use the constant in DeviceConfig
+ *
* @hide
*/
- public static final int SYNC_DISABLED_MODE_UNTIL_REBOOT = 2;
+ @Deprecated
+ public static final int SYNC_DISABLED_MODE_UNTIL_REBOOT =
+ DeviceConfig.SYNC_DISABLED_MODE_UNTIL_REBOOT;
/**
* The content:// style URL for the config table.
diff --git a/core/java/android/service/notification/NotificationListenerService.java b/core/java/android/service/notification/NotificationListenerService.java
index d39a6ea..1d49049 100644
--- a/core/java/android/service/notification/NotificationListenerService.java
+++ b/core/java/android/service/notification/NotificationListenerService.java
@@ -1421,7 +1421,7 @@
if (getContext().getApplicationInfo().targetSdkVersion < Build.VERSION_CODES.P) {
ArrayList<Person> people = notification.extras.getParcelableArrayList(
Notification.EXTRA_PEOPLE_LIST, android.app.Person.class);
- if (people != null && people.isEmpty()) {
+ if (people != null && !people.isEmpty()) {
int size = people.size();
String[] peopleArray = new String[size];
for (int i = 0; i < size; i++) {
diff --git a/core/java/android/service/voice/HotwordDetectedResult.java b/core/java/android/service/voice/HotwordDetectedResult.java
index dd3f99c..ab6f055 100644
--- a/core/java/android/service/voice/HotwordDetectedResult.java
+++ b/core/java/android/service/voice/HotwordDetectedResult.java
@@ -94,6 +94,9 @@
/** Represents unset value for the triggered audio channel. */
public static final int AUDIO_CHANNEL_UNSET = -1;
+ /** Represents unset value for the background audio signal power. */
+ public static final int BACKGROUND_AUDIO_POWER_UNSET = -1;
+
/** Limits the max value for the hotword offset. */
private static final int LIMIT_HOTWORD_OFFSET_MAX_VALUE = 60 * 60 * 1000; // 1 hour
@@ -296,6 +299,24 @@
new DetectedPhrase.Builder().build();
/**
+ * Power of the background audio signal in which the hotword phrase was detected.
+ *
+ * <p> Only values between 0 and {@link #getMaxBackgroundAudioPower} (inclusive)
+ * and the special value {@link #BACKGROUND_AUDIO_POWER_UNSET} are valid.
+ */
+ private final int mBackgroundAudioPower;
+ private static int defaultBackgroundAudioPower() {
+ return BACKGROUND_AUDIO_POWER_UNSET;
+ }
+
+ /**
+ * Returns the maximum value of {@link #getBackgroundAudioPower()}.
+ */
+ public static int getMaxBackgroundAudioPower() {
+ return 255;
+ }
+
+ /**
* Returns how many bytes should be written into the Parcel
*
* @hide
@@ -346,6 +367,10 @@
if (!persistableBundle.isEmpty()) {
totalBits += getParcelableSize(persistableBundle) * Byte.SIZE;
}
+ if (hotwordDetectedResult.getBackgroundAudioPower() != defaultBackgroundAudioPower()) {
+ totalBits += bitCount(HotwordDetectedResult.getMaxBackgroundAudioPower());
+ }
+
return totalBits;
}
@@ -362,6 +387,10 @@
Preconditions.checkArgumentInRange(mScore, 0, getMaxScore(), "score");
Preconditions.checkArgumentInRange(mPersonalizedScore, 0, getMaxScore(),
"personalizedScore");
+ if (mBackgroundAudioPower != BACKGROUND_AUDIO_POWER_UNSET) {
+ Preconditions.checkArgumentInRange(mBackgroundAudioPower,
+ 0, getMaxBackgroundAudioPower(), "backgroundAudioPower");
+ }
Preconditions.checkArgumentInRange((long) mHotwordDurationMillis, 0,
AudioRecord.getMaxSharedAudioHistoryMillis(), "hotwordDurationMillis");
if (mHotwordOffsetMillis != HOTWORD_OFFSET_UNSET) {
@@ -493,7 +522,8 @@
.setPersonalizedScore(mPersonalizedScore)
.setAudioStreams(mAudioStreams)
.setExtras(mExtras)
- .setDetectedPhrase(mDetectedPhrase);
+ .setDetectedPhrase(mDetectedPhrase)
+ .setBackgroundAudioPower(mBackgroundAudioPower);
}
@@ -604,7 +634,8 @@
int personalizedScore,
@NonNull List<HotwordAudioStream> audioStreams,
@NonNull PersistableBundle extras,
- @NonNull DetectedPhrase detectedPhrase) {
+ @NonNull DetectedPhrase detectedPhrase,
+ int backgroundAudioPower) {
this.mConfidenceLevel = confidenceLevel;
com.android.internal.util.AnnotationValidations.validate(
HotwordConfidenceLevelValue.class, null, mConfidenceLevel);
@@ -624,6 +655,7 @@
this.mDetectedPhrase = detectedPhrase;
com.android.internal.util.AnnotationValidations.validate(
NonNull.class, null, mDetectedPhrase);
+ this.mBackgroundAudioPower = backgroundAudioPower;
onConstructed();
}
@@ -732,6 +764,17 @@
return mDetectedPhrase;
}
+ /**
+ * Power of the background audio signal in which the hotword phrase was detected.
+ *
+ * <p> Only values between 0 and {@link #getMaxBackgroundAudioPower} (inclusive)
+ * and the special value {@link #BACKGROUND_AUDIO_POWER_UNSET} are valid.
+ */
+ @DataClass.Generated.Member
+ public int getBackgroundAudioPower() {
+ return mBackgroundAudioPower;
+ }
+
@Override
@DataClass.Generated.Member
public String toString() {
@@ -749,7 +792,8 @@
"personalizedScore = " + mPersonalizedScore + ", " +
"audioStreams = " + mAudioStreams + ", " +
"extras = " + mExtras + ", " +
- "detectedPhrase = " + mDetectedPhrase +
+ "detectedPhrase = " + mDetectedPhrase + ", " +
+ "backgroundAudioPower = " + mBackgroundAudioPower +
" }";
}
@@ -776,7 +820,8 @@
&& mPersonalizedScore == that.mPersonalizedScore
&& Objects.equals(mAudioStreams, that.mAudioStreams)
&& Objects.equals(mExtras, that.mExtras)
- && Objects.equals(mDetectedPhrase, that.mDetectedPhrase);
+ && Objects.equals(mDetectedPhrase, that.mDetectedPhrase)
+ && mBackgroundAudioPower == that.mBackgroundAudioPower;
}
@Override
@@ -797,6 +842,7 @@
_hash = 31 * _hash + Objects.hashCode(mAudioStreams);
_hash = 31 * _hash + Objects.hashCode(mExtras);
_hash = 31 * _hash + Objects.hashCode(mDetectedPhrase);
+ _hash = 31 * _hash + mBackgroundAudioPower;
return _hash;
}
@@ -820,6 +866,7 @@
dest.writeParcelableList(mAudioStreams, flags);
dest.writeTypedObject(mExtras, flags);
dest.writeTypedObject(mDetectedPhrase, flags);
+ dest.writeInt(mBackgroundAudioPower);
}
@Override
@@ -846,6 +893,7 @@
in.readParcelableList(audioStreams, HotwordAudioStream.class.getClassLoader());
PersistableBundle extras = (PersistableBundle) in.readTypedObject(PersistableBundle.CREATOR);
DetectedPhrase detectedPhrase = (DetectedPhrase) in.readTypedObject(DetectedPhrase.CREATOR);
+ int backgroundAudioPower = in.readInt();
this.mConfidenceLevel = confidenceLevel;
com.android.internal.util.AnnotationValidations.validate(
@@ -866,6 +914,7 @@
this.mDetectedPhrase = detectedPhrase;
com.android.internal.util.AnnotationValidations.validate(
NonNull.class, null, mDetectedPhrase);
+ this.mBackgroundAudioPower = backgroundAudioPower;
onConstructed();
}
@@ -902,6 +951,7 @@
private @NonNull List<HotwordAudioStream> mAudioStreams;
private @NonNull PersistableBundle mExtras;
private @NonNull DetectedPhrase mDetectedPhrase;
+ private int mBackgroundAudioPower;
private long mBuilderFieldsSet = 0L;
@@ -1052,10 +1102,24 @@
return this;
}
+ /**
+ * Power of the background audio signal in which the hotword phrase was detected.
+ *
+ * <p> Only values between 0 and {@link #getMaxBackgroundAudioPower} (inclusive)
+ * and the special value {@link #BACKGROUND_AUDIO_POWER_UNSET} are valid.
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setBackgroundAudioPower(int value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x800;
+ mBackgroundAudioPower = value;
+ return this;
+ }
+
/** Builds the instance. This builder should not be touched after calling this! */
public @NonNull HotwordDetectedResult build() {
checkNotUsed();
- mBuilderFieldsSet |= 0x800; // Mark builder used
+ mBuilderFieldsSet |= 0x1000; // Mark builder used
if ((mBuilderFieldsSet & 0x1) == 0) {
mConfidenceLevel = defaultConfidenceLevel();
@@ -1090,6 +1154,9 @@
if ((mBuilderFieldsSet & 0x400) == 0) {
mDetectedPhrase = new DetectedPhrase.Builder().build();
}
+ if ((mBuilderFieldsSet & 0x800) == 0) {
+ mBackgroundAudioPower = defaultBackgroundAudioPower();
+ }
HotwordDetectedResult o = new HotwordDetectedResult(
mConfidenceLevel,
mMediaSyncEvent,
@@ -1101,12 +1168,13 @@
mPersonalizedScore,
mAudioStreams,
mExtras,
- mDetectedPhrase);
+ mDetectedPhrase,
+ mBackgroundAudioPower);
return o;
}
private void checkNotUsed() {
- if ((mBuilderFieldsSet & 0x800) != 0) {
+ if ((mBuilderFieldsSet & 0x1000) != 0) {
throw new IllegalStateException(
"This Builder should not be reused. Use a new Builder instance instead");
}
@@ -1114,10 +1182,10 @@
}
@DataClass.Generated(
- time = 1676870324215L,
+ time = 1679010159293L,
codegenVersion = "1.0.23",
sourceFile = "frameworks/base/core/java/android/service/voice/HotwordDetectedResult.java",
- inputSignatures = "public static final int CONFIDENCE_LEVEL_NONE\npublic static final int CONFIDENCE_LEVEL_LOW\npublic static final int CONFIDENCE_LEVEL_LOW_MEDIUM\npublic static final int CONFIDENCE_LEVEL_MEDIUM\npublic static final int CONFIDENCE_LEVEL_MEDIUM_HIGH\npublic static final int CONFIDENCE_LEVEL_HIGH\npublic static final int CONFIDENCE_LEVEL_VERY_HIGH\npublic static final int HOTWORD_OFFSET_UNSET\npublic static final int AUDIO_CHANNEL_UNSET\nprivate static final int LIMIT_HOTWORD_OFFSET_MAX_VALUE\nprivate static final int LIMIT_AUDIO_CHANNEL_MAX_VALUE\nprivate static final java.lang.String EXTRA_PROXIMITY\npublic static final int PROXIMITY_UNKNOWN\npublic static final int PROXIMITY_NEAR\npublic static final int PROXIMITY_FAR\nprivate final @android.service.voice.HotwordDetectedResult.HotwordConfidenceLevelValue int mConfidenceLevel\nprivate @android.annotation.Nullable android.media.MediaSyncEvent mMediaSyncEvent\nprivate int mHotwordOffsetMillis\nprivate int mHotwordDurationMillis\nprivate int mAudioChannel\nprivate boolean mHotwordDetectionPersonalized\nprivate final int mScore\nprivate final int mPersonalizedScore\nprivate final @android.annotation.NonNull java.util.List<android.service.voice.HotwordAudioStream> mAudioStreams\nprivate final @android.annotation.NonNull android.os.PersistableBundle mExtras\nprivate static int sMaxBundleSize\nprivate @android.annotation.NonNull android.service.voice.DetectedPhrase mDetectedPhrase\nprivate static int defaultConfidenceLevel()\nprivate static int defaultScore()\nprivate static int defaultPersonalizedScore()\npublic static int getMaxScore()\npublic @java.lang.Deprecated int getHotwordPhraseId()\npublic static @java.lang.Deprecated int getMaxHotwordPhraseId()\nprivate static java.util.List<android.service.voice.HotwordAudioStream> defaultAudioStreams()\nprivate static android.os.PersistableBundle defaultExtras()\npublic static int getMaxBundleSize()\npublic @android.annotation.Nullable android.media.MediaSyncEvent getMediaSyncEvent()\npublic static int getParcelableSize(android.os.Parcelable)\npublic static int getUsageSize(android.service.voice.HotwordDetectedResult)\nstatic int bitCount(long)\nprivate void onConstructed()\npublic @android.annotation.NonNull java.util.List<android.service.voice.HotwordAudioStream> getAudioStreams()\npublic void setProximity(double)\npublic @android.service.voice.HotwordDetectedResult.ProximityValue int getProximity()\nprivate @android.service.voice.HotwordDetectedResult.ProximityValue int convertToProximityLevel(double)\npublic android.service.voice.HotwordDetectedResult.Builder buildUpon()\nclass HotwordDetectedResult extends java.lang.Object implements [android.os.Parcelable]\npublic @android.annotation.NonNull android.service.voice.HotwordDetectedResult.Builder setAudioStreams(java.util.List<android.service.voice.HotwordAudioStream>)\npublic @java.lang.Deprecated @android.annotation.NonNull android.service.voice.HotwordDetectedResult.Builder setHotwordPhraseId(int)\nclass BaseBuilder extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genConstructor=false, genBuilder=true, genEqualsHashCode=true, genHiddenConstDefs=true, genParcelable=true, genToString=true)\npublic @android.annotation.NonNull android.service.voice.HotwordDetectedResult.Builder setAudioStreams(java.util.List<android.service.voice.HotwordAudioStream>)\npublic @java.lang.Deprecated @android.annotation.NonNull android.service.voice.HotwordDetectedResult.Builder setHotwordPhraseId(int)\nclass BaseBuilder extends java.lang.Object implements []")
+ inputSignatures = "public static final int CONFIDENCE_LEVEL_NONE\npublic static final int CONFIDENCE_LEVEL_LOW\npublic static final int CONFIDENCE_LEVEL_LOW_MEDIUM\npublic static final int CONFIDENCE_LEVEL_MEDIUM\npublic static final int CONFIDENCE_LEVEL_MEDIUM_HIGH\npublic static final int CONFIDENCE_LEVEL_HIGH\npublic static final int CONFIDENCE_LEVEL_VERY_HIGH\npublic static final int HOTWORD_OFFSET_UNSET\npublic static final int AUDIO_CHANNEL_UNSET\npublic static final int BACKGROUND_AUDIO_POWER_UNSET\nprivate static final int LIMIT_HOTWORD_OFFSET_MAX_VALUE\nprivate static final int LIMIT_AUDIO_CHANNEL_MAX_VALUE\nprivate static final java.lang.String EXTRA_PROXIMITY\npublic static final int PROXIMITY_UNKNOWN\npublic static final int PROXIMITY_NEAR\npublic static final int PROXIMITY_FAR\nprivate final @android.service.voice.HotwordDetectedResult.HotwordConfidenceLevelValue int mConfidenceLevel\nprivate @android.annotation.Nullable android.media.MediaSyncEvent mMediaSyncEvent\nprivate int mHotwordOffsetMillis\nprivate int mHotwordDurationMillis\nprivate int mAudioChannel\nprivate boolean mHotwordDetectionPersonalized\nprivate final int mScore\nprivate final int mPersonalizedScore\nprivate final @android.annotation.NonNull java.util.List<android.service.voice.HotwordAudioStream> mAudioStreams\nprivate final @android.annotation.NonNull android.os.PersistableBundle mExtras\nprivate static int sMaxBundleSize\nprivate @android.annotation.NonNull android.service.voice.DetectedPhrase mDetectedPhrase\nprivate final int mBackgroundAudioPower\nprivate static int defaultConfidenceLevel()\nprivate static int defaultScore()\nprivate static int defaultPersonalizedScore()\npublic static int getMaxScore()\npublic @java.lang.Deprecated int getHotwordPhraseId()\npublic static @java.lang.Deprecated int getMaxHotwordPhraseId()\nprivate static java.util.List<android.service.voice.HotwordAudioStream> defaultAudioStreams()\nprivate static android.os.PersistableBundle defaultExtras()\npublic static int getMaxBundleSize()\npublic @android.annotation.Nullable android.media.MediaSyncEvent getMediaSyncEvent()\nprivate static int defaultBackgroundAudioPower()\npublic static int getMaxBackgroundAudioPower()\npublic static int getParcelableSize(android.os.Parcelable)\npublic static int getUsageSize(android.service.voice.HotwordDetectedResult)\nstatic int bitCount(long)\nprivate void onConstructed()\npublic @android.annotation.NonNull java.util.List<android.service.voice.HotwordAudioStream> getAudioStreams()\npublic void setProximity(double)\npublic @android.service.voice.HotwordDetectedResult.ProximityValue int getProximity()\nprivate @android.service.voice.HotwordDetectedResult.ProximityValue int convertToProximityLevel(double)\npublic android.service.voice.HotwordDetectedResult.Builder buildUpon()\nclass HotwordDetectedResult extends java.lang.Object implements [android.os.Parcelable]\npublic @android.annotation.NonNull android.service.voice.HotwordDetectedResult.Builder setAudioStreams(java.util.List<android.service.voice.HotwordAudioStream>)\npublic @java.lang.Deprecated @android.annotation.NonNull android.service.voice.HotwordDetectedResult.Builder setHotwordPhraseId(int)\nclass BaseBuilder extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genConstructor=false, genBuilder=true, genEqualsHashCode=true, genHiddenConstDefs=true, genParcelable=true, genToString=true)\npublic @android.annotation.NonNull android.service.voice.HotwordDetectedResult.Builder setAudioStreams(java.util.List<android.service.voice.HotwordAudioStream>)\npublic @java.lang.Deprecated @android.annotation.NonNull android.service.voice.HotwordDetectedResult.Builder setHotwordPhraseId(int)\nclass BaseBuilder extends java.lang.Object implements []")
@Deprecated
private void __metadata() {}
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 2a67b44..41c8b4a 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -1312,15 +1312,21 @@
<!-- The container color of surface the most elevated, which replaces the previous surface
variant. @hide -->
<attr name="materialColorSurfaceContainerHighest" format="color"/>
- <!-- undefined @hide -->
+ <!-- A tonal variation of the on surface color that passes accessibility guidelines for
+ text/iconography when drawn on top of surface variant. @hide -->
<attr name="materialColorOnSurfaceVariant" format="color"/>
- <!-- undefined @hide -->
+ <!-- A color meant to be used in element outlines. @hide -->
<attr name="materialColorOutline" format="color"/>
- <!-- undefined @hide -->
+ <!-- A color meant to be used in element outlines on the surface-variant color. @hide -->
+ <attr name="materialColorOutlineVariant" format="color"/>
+ <!-- A color that passes accessibility guidelines for text/iconography when drawn on top of
+ primary. @hide -->
<attr name="materialColorOnPrimary" format="color"/>
- <!-- undefined @hide -->
+ <!-- A color that passes accessibility guidelines for text/iconography when drawn on top of
+ surface. @hide -->
<attr name="materialColorOnSurface" format="color"/>
- <!-- undefined @hide -->
+ <!-- The container color of surface, which replaces the previous surface at elevation level
+ 2. @hide -->
<attr name="materialColorSurfaceContainer" format="color"/>
<!-- The container color of surface, which replaces the previous surface at elevation level
2. @hide -->
diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml
index 6b3c155..dc75658 100644
--- a/core/res/res/values/colors.xml
+++ b/core/res/res/values/colors.xml
@@ -465,6 +465,7 @@
<color name="system_surface_variant_light">#E1E2EC</color>
<color name="system_on_surface_variant_light">#44474F</color>
<color name="system_outline_light">#72747D</color>
+ <color name="system_outline_variant_light">#C4C7C5</color>
<color name="system_error_light">#C00003</color>
<color name="system_on_error_light">#FFFFFF</color>
<color name="system_error_container_light">#FFDAD5</color>
@@ -520,6 +521,7 @@
<color name="system_surface_variant_dark">#44474F</color>
<color name="system_on_surface_variant_dark">#C4C6D0</color>
<color name="system_outline_dark">#72747D</color>
+ <color name="system_outline_variant_dark">#444746</color>
<color name="system_error_dark">#FFB4A8</color>
<color name="system_on_error_dark">#690001</color>
<color name="system_error_container_dark">#930001</color>
diff --git a/core/res/res/values/public-staging.xml b/core/res/res/values/public-staging.xml
index 69d5fef..d868a0a 100644
--- a/core/res/res/values/public-staging.xml
+++ b/core/res/res/values/public-staging.xml
@@ -269,6 +269,20 @@
<public name="system_palette_key_color_tertiary_dark"/>
<public name="system_palette_key_color_neutral_dark"/>
<public name="system_palette_key_color_neutral_variant_dark"/>
+ <public name="system_primary_fixed" />
+ <public name="system_primary_fixed_dim" />
+ <public name="system_on_primary_fixed" />
+ <public name="system_on_primary_fixed_variant" />
+ <public name="system_secondary_fixed" />
+ <public name="system_secondary_fixed_dim" />
+ <public name="system_on_secondary_fixed" />
+ <public name="system_on_secondary_fixed_variant" />
+ <public name="system_tertiary_fixed" />
+ <public name="system_tertiary_fixed_dim" />
+ <public name="system_on_tertiary_fixed" />
+ <public name="system_on_tertiary_fixed_variant" />
+ <public name="system_outline_variant_light" />
+ <public name="system_outline_variant_dark" />
</staging-public-group>
<staging-public-group type="array" first-id="0x01c80000">
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 1cb56e0..60795ad 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -5026,6 +5026,7 @@
<java-symbol name="materialColorSurfaceContainerHighest" type="attr"/>
<java-symbol name="materialColorOnSurfaceVariant" type="attr"/>
<java-symbol name="materialColorOutline" type="attr"/>
+ <java-symbol name="materialColorOutlineVariant" type="attr"/>
<java-symbol name="materialColorOnPrimary" type="attr"/>
<java-symbol name="materialColorOnSurface" type="attr"/>
<java-symbol name="materialColorSurfaceContainer" type="attr"/>
diff --git a/core/res/res/values/themes_device_defaults.xml b/core/res/res/values/themes_device_defaults.xml
index 511e734..2986bdf 100644
--- a/core/res/res/values/themes_device_defaults.xml
+++ b/core/res/res/values/themes_device_defaults.xml
@@ -278,6 +278,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -373,6 +374,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -467,6 +469,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -563,6 +566,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -658,6 +662,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -761,6 +766,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -855,6 +861,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -948,6 +955,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -1042,6 +1050,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -1152,6 +1161,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -1247,6 +1257,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -1340,6 +1351,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -1435,6 +1447,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -1529,6 +1542,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -1623,6 +1637,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -1717,6 +1732,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -1811,6 +1827,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -1905,6 +1922,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -2004,6 +2022,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -2096,6 +2115,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -2326,6 +2346,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_light</item>
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
@@ -2420,6 +2441,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_light</item>
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
@@ -2513,6 +2535,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_light</item>
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
@@ -2607,6 +2630,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_light</item>
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
@@ -2703,6 +2727,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_light</item>
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
@@ -2798,6 +2823,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_light</item>
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
@@ -2899,6 +2925,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_light</item>
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
@@ -2996,6 +3023,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_light</item>
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
@@ -3092,6 +3120,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_light</item>
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
@@ -3189,6 +3218,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_light</item>
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
@@ -3267,6 +3297,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_light</item>
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
@@ -3345,6 +3376,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_light</item>
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
@@ -3442,6 +3474,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_light</item>
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
@@ -3540,6 +3573,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_light</item>
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
@@ -3636,6 +3670,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_light</item>
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
@@ -3731,6 +3766,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_light</item>
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
@@ -3825,6 +3861,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_light</item>
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
@@ -3919,6 +3956,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_light</item>
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
@@ -4011,6 +4049,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_light</item>
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
@@ -4110,6 +4149,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -4190,6 +4230,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -4262,6 +4303,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -4356,6 +4398,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -4434,6 +4477,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -4552,6 +4596,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -4648,6 +4693,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -4770,6 +4816,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -4822,6 +4869,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_light</item>
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
@@ -4878,6 +4926,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
@@ -4930,6 +4979,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_light</item>
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
@@ -4993,6 +5043,7 @@
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
+ <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
diff --git a/core/tests/coretests/src/android/provider/DeviceConfigTest.java b/core/tests/coretests/src/android/provider/DeviceConfigTest.java
index aa1853f..1ea20f1 100644
--- a/core/tests/coretests/src/android/provider/DeviceConfigTest.java
+++ b/core/tests/coretests/src/android/provider/DeviceConfigTest.java
@@ -803,51 +803,51 @@
try {
// Ensure the device starts in a known state.
- DeviceConfig.setSyncDisabledMode(Settings.Config.SYNC_DISABLED_MODE_NONE);
+ DeviceConfig.setSyncDisabledMode(DeviceConfig.SYNC_DISABLED_MODE_NONE);
// Assert starting state.
assertThat(DeviceConfig.getSyncDisabledMode())
- .isEqualTo(Settings.Config.SYNC_DISABLED_MODE_NONE);
+ .isEqualTo(DeviceConfig.SYNC_DISABLED_MODE_NONE);
assertThat(DeviceConfig.setProperties(properties1)).isTrue();
assertThat(DeviceConfig.getProperties(NAMESPACE, KEY).getString(KEY, DEFAULT_VALUE))
.isEqualTo(VALUE);
// Test disabled (persistent). Persistence is not actually tested, that would require
// a host test.
- DeviceConfig.setSyncDisabledMode(Settings.Config.SYNC_DISABLED_MODE_PERSISTENT);
+ DeviceConfig.setSyncDisabledMode(DeviceConfig.SYNC_DISABLED_MODE_PERSISTENT);
assertThat(DeviceConfig.getSyncDisabledMode())
- .isEqualTo(Settings.Config.SYNC_DISABLED_MODE_PERSISTENT);
+ .isEqualTo(DeviceConfig.SYNC_DISABLED_MODE_PERSISTENT);
assertThat(DeviceConfig.setProperties(properties2)).isFalse();
assertThat(DeviceConfig.getProperties(NAMESPACE, KEY).getString(KEY, DEFAULT_VALUE))
.isEqualTo(VALUE);
// Return to not disabled.
- DeviceConfig.setSyncDisabledMode(Settings.Config.SYNC_DISABLED_MODE_NONE);
+ DeviceConfig.setSyncDisabledMode(DeviceConfig.SYNC_DISABLED_MODE_NONE);
assertThat(DeviceConfig.getSyncDisabledMode())
- .isEqualTo(Settings.Config.SYNC_DISABLED_MODE_NONE);
+ .isEqualTo(DeviceConfig.SYNC_DISABLED_MODE_NONE);
assertThat(DeviceConfig.setProperties(properties2)).isTrue();
assertThat(DeviceConfig.getProperties(NAMESPACE, KEY).getString(KEY, DEFAULT_VALUE))
.isEqualTo(VALUE2);
// Test disabled (persistent). Absence of persistence is not actually tested, that would
// require a host test.
- DeviceConfig.setSyncDisabledMode(Settings.Config.SYNC_DISABLED_MODE_UNTIL_REBOOT);
+ DeviceConfig.setSyncDisabledMode(DeviceConfig.SYNC_DISABLED_MODE_UNTIL_REBOOT);
assertThat(DeviceConfig.getSyncDisabledMode())
- .isEqualTo(Settings.Config.SYNC_DISABLED_MODE_UNTIL_REBOOT);
+ .isEqualTo(DeviceConfig.SYNC_DISABLED_MODE_UNTIL_REBOOT);
assertThat(DeviceConfig.setProperties(properties1)).isFalse();
assertThat(DeviceConfig.getProperties(NAMESPACE, KEY).getString(KEY, DEFAULT_VALUE))
.isEqualTo(VALUE2);
// Return to not disabled.
- DeviceConfig.setSyncDisabledMode(Settings.Config.SYNC_DISABLED_MODE_NONE);
+ DeviceConfig.setSyncDisabledMode(DeviceConfig.SYNC_DISABLED_MODE_NONE);
assertThat(DeviceConfig.getSyncDisabledMode())
- .isEqualTo(Settings.Config.SYNC_DISABLED_MODE_NONE);
+ .isEqualTo(DeviceConfig.SYNC_DISABLED_MODE_NONE);
assertThat(DeviceConfig.setProperties(properties1)).isTrue();
assertThat(DeviceConfig.getProperties(NAMESPACE, KEY).getString(KEY, DEFAULT_VALUE))
.isEqualTo(VALUE);
} finally {
// Try to return to the default sync disabled state in case of failure.
- DeviceConfig.setSyncDisabledMode(Settings.Config.SYNC_DISABLED_MODE_NONE);
+ DeviceConfig.setSyncDisabledMode(DeviceConfig.SYNC_DISABLED_MODE_NONE);
// NAMESPACE will be cleared by cleanUp()
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java
index ea2559a..b1e431d 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java
@@ -193,7 +193,7 @@
Rect destBounds = mPipKeepClearAlgorithm.adjust(mPipBoundsState,
mPipBoundsAlgorithm);
// only move if the bounds are actually different
- if (destBounds != mPipBoundsState.getBounds()) {
+ if (!destBounds.equals(mPipBoundsState.getBounds())) {
if (mPipTransitionState.hasEnteredPip()) {
// if already in PiP, schedule separate animation
mPipTaskOrganizer.scheduleAnimateResizePip(destBounds,
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index 8efd180..8ab7159 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -6251,7 +6251,6 @@
* Volume behavior for an audio device where no software attenuation is applied, and
* the volume is kept synchronized between the host and the device itself through a
* device-specific protocol such as BT AVRCP.
- * @see #setDeviceVolumeBehavior(AudioDeviceAttributes, int)
*/
@SystemApi
public static final int DEVICE_VOLUME_BEHAVIOR_ABSOLUTE = 3;
@@ -6262,7 +6261,6 @@
* device-specific protocol (such as for hearing aids), based on the audio mode (e.g.
* normal vs in phone call).
* @see #setMode(int)
- * @see #setDeviceVolumeBehavior(AudioDeviceAttributes, int)
*/
@SystemApi
public static final int DEVICE_VOLUME_BEHAVIOR_ABSOLUTE_MULTI_MODE = 4;
@@ -6272,6 +6270,11 @@
* A variant of {@link #DEVICE_VOLUME_BEHAVIOR_ABSOLUTE} where the host cannot reliably set
* the volume percentage of the audio device. Specifically, {@link #setStreamVolume} will have
* no effect, or an unreliable effect.
+ *
+ * {@link #DEVICE_VOLUME_BEHAVIOR_FULL} will be returned instead by
+ * {@link #getDeviceVolumeBehavior} for target SDK versions before U.
+ *
+ * @see #RETURN_DEVICE_VOLUME_BEHAVIOR_ABSOLUTE_ADJUST_ONLY
*/
@SystemApi
public static final int DEVICE_VOLUME_BEHAVIOR_ABSOLUTE_ADJUST_ONLY = 5;
@@ -6313,18 +6316,27 @@
public @interface AbsoluteDeviceVolumeBehavior {}
/**
+ * Volume behaviors that can be set with {@link #setDeviceVolumeBehavior}.
* @hide
- * Throws IAE on an invalid volume behavior value
+ */
+ @IntDef({
+ DEVICE_VOLUME_BEHAVIOR_VARIABLE,
+ DEVICE_VOLUME_BEHAVIOR_FULL,
+ DEVICE_VOLUME_BEHAVIOR_FIXED,
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface SettableDeviceVolumeBehavior {}
+
+ /**
+ * @hide
+ * Throws IAE on a non-settable volume behavior value
* @param volumeBehavior behavior value to check
*/
- public static void enforceValidVolumeBehavior(int volumeBehavior) {
+ public static void enforceSettableVolumeBehavior(int volumeBehavior) {
switch (volumeBehavior) {
case DEVICE_VOLUME_BEHAVIOR_VARIABLE:
case DEVICE_VOLUME_BEHAVIOR_FULL:
case DEVICE_VOLUME_BEHAVIOR_FIXED:
- case DEVICE_VOLUME_BEHAVIOR_ABSOLUTE:
- case DEVICE_VOLUME_BEHAVIOR_ABSOLUTE_MULTI_MODE:
- case DEVICE_VOLUME_BEHAVIOR_ABSOLUTE_ADJUST_ONLY:
return;
default:
throw new IllegalArgumentException("Illegal volume behavior " + volumeBehavior);
@@ -6334,11 +6346,8 @@
/**
* @hide
* Sets the volume behavior for an audio output device.
- * @see #DEVICE_VOLUME_BEHAVIOR_VARIABLE
- * @see #DEVICE_VOLUME_BEHAVIOR_FULL
- * @see #DEVICE_VOLUME_BEHAVIOR_FIXED
- * @see #DEVICE_VOLUME_BEHAVIOR_ABSOLUTE
- * @see #DEVICE_VOLUME_BEHAVIOR_ABSOLUTE_MULTI_MODE
+ *
+ * @see SettableDeviceVolumeBehavior
* @param device the device to be affected
* @param deviceVolumeBehavior one of the device behaviors
*/
@@ -6348,10 +6357,10 @@
Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED
})
public void setDeviceVolumeBehavior(@NonNull AudioDeviceAttributes device,
- @DeviceVolumeBehavior int deviceVolumeBehavior) {
+ @SettableDeviceVolumeBehavior int deviceVolumeBehavior) {
// verify arguments (validity of device type is enforced in server)
Objects.requireNonNull(device);
- enforceValidVolumeBehavior(deviceVolumeBehavior);
+ enforceSettableVolumeBehavior(deviceVolumeBehavior);
// communicate with service
final IAudioService service = getService();
try {
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index 7607909..7e89bfc 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -19,9 +19,9 @@
import static android.os.Process.ROOT_UID;
import static android.os.Process.SHELL_UID;
import static android.os.Process.SYSTEM_UID;
-import static android.provider.Settings.Config.SYNC_DISABLED_MODE_NONE;
-import static android.provider.Settings.Config.SYNC_DISABLED_MODE_PERSISTENT;
-import static android.provider.Settings.Config.SYNC_DISABLED_MODE_UNTIL_REBOOT;
+import static android.provider.DeviceConfig.SYNC_DISABLED_MODE_NONE;
+import static android.provider.DeviceConfig.SYNC_DISABLED_MODE_PERSISTENT;
+import static android.provider.DeviceConfig.SYNC_DISABLED_MODE_UNTIL_REBOOT;
import static android.provider.Settings.SET_ALL_RESULT_DISABLED;
import static android.provider.Settings.SET_ALL_RESULT_FAILURE;
import static android.provider.Settings.SET_ALL_RESULT_SUCCESS;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java
index e8058b8..769edf7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java
@@ -831,18 +831,16 @@
private boolean isInVisibleLocation(NotificationEntry entry) {
ExpandableNotificationRow row = entry.getRow();
- ExpandableViewState childViewState = row.getViewState();
-
- if (childViewState == null) {
+ if (row == null) {
return false;
}
+
+ ExpandableViewState childViewState = row.getViewState();
if ((childViewState.location & ExpandableViewState.VISIBLE_LOCATIONS) == 0) {
return false;
}
- if (row.getVisibility() != View.VISIBLE) {
- return false;
- }
- return true;
+
+ return row.getVisibility() == View.VISIBLE;
}
public boolean isViewAffectedBySwipe(ExpandableView expandableView) {
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index 0e4331e..2f12092 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -7235,7 +7235,7 @@
super.setDeviceVolumeBehavior_enforcePermission();
// verify arguments
Objects.requireNonNull(device);
- AudioManager.enforceValidVolumeBehavior(deviceVolumeBehavior);
+ AudioManager.enforceSettableVolumeBehavior(deviceVolumeBehavior);
sVolumeLogger.enqueue(new EventLogger.StringEvent("setDeviceVolumeBehavior: dev:"
+ AudioSystem.getOutputDeviceName(device.getInternalType()) + " addr:"
diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
index 586e112..232ca45 100644
--- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
+++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
@@ -4400,15 +4400,9 @@
pw.println(" -f: force compilation even if not needed");
pw.println(" -m: select compilation mode");
pw.println(" MODE is one of the dex2oat compiler filters:");
- pw.println(" assume-verified");
- pw.println(" extract");
pw.println(" verify");
- pw.println(" quicken");
- pw.println(" space-profile");
- pw.println(" space");
pw.println(" speed-profile");
pw.println(" speed");
- pw.println(" everything");
pw.println(" -r: select compilation reason");
pw.println(" REASON is one of:");
for (int i = 0; i < PackageManagerServiceCompilerMapping.REASON_STRINGS.length; i++) {
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenerServiceTest.java
index 2f7a5f4..7a55143 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenerServiceTest.java
@@ -21,6 +21,8 @@
import static android.service.notification.NotificationListenerService.Ranking.USER_SENTIMENT_NEUTRAL;
import static android.service.notification.NotificationListenerService.Ranking.USER_SENTIMENT_POSITIVE;
+import static com.google.common.truth.Truth.assertThat;
+
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
@@ -35,10 +37,12 @@
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.PendingIntent;
+import android.app.Person;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
+import android.content.pm.ParceledListSlice;
import android.content.pm.ShortcutInfo;
import android.graphics.Bitmap;
import android.graphics.drawable.Icon;
@@ -46,11 +50,14 @@
import android.os.Build;
import android.os.IBinder;
import android.os.Parcel;
+import android.os.RemoteException;
+import android.os.UserHandle;
import android.service.notification.NotificationListenerService;
import android.service.notification.NotificationListenerService.Ranking;
import android.service.notification.NotificationListenerService.RankingMap;
import android.service.notification.NotificationRankingUpdate;
import android.service.notification.SnoozeCriterion;
+import android.service.notification.StatusBarNotification;
import android.test.suitebuilder.annotation.SmallTest;
import androidx.test.runner.AndroidJUnit4;
@@ -63,6 +70,7 @@
import org.junit.runner.RunWith;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
@SmallTest
@@ -95,6 +103,31 @@
}
@Test
+ public void testGetActiveNotifications_preP_mapsExtraPeople() throws RemoteException {
+ TestListenerService service = new TestListenerService();
+ service.attachBaseContext(mContext);
+ service.targetSdk = Build.VERSION_CODES.O_MR1;
+
+ Notification notification = new Notification();
+ ArrayList<Person> people = new ArrayList<>();
+ people.add(new Person.Builder().setUri("uri1").setName("P1").build());
+ people.add(new Person.Builder().setUri("uri2").setName("P2").build());
+ notification.extras.putParcelableArrayList(Notification.EXTRA_PEOPLE_LIST, people);
+ when(service.getNoMan().getActiveNotificationsFromListener(any(), any(), anyInt()))
+ .thenReturn(new ParceledListSlice<StatusBarNotification>(Arrays.asList(
+ new StatusBarNotification("pkg", "opPkg", 1, "tag", 123, 1234,
+ notification, UserHandle.of(0), null, 0))));
+
+ StatusBarNotification[] sbns = service.getActiveNotifications();
+
+ assertThat(sbns).hasLength(1);
+ String[] mappedPeople = sbns[0].getNotification().extras.getStringArray(
+ Notification.EXTRA_PEOPLE);
+ assertThat(mappedPeople).isNotNull();
+ assertThat(mappedPeople).asList().containsExactly("uri1", "uri2");
+ }
+
+ @Test
public void testRanking() {
TestListenerService service = new TestListenerService();
service.applyUpdateLocked(generateUpdate());