Make sure theme attributes don't get lost

When an app calls setTaskDescription it overrides the hidden
attributes derived from the theme. Make sure to not override these
if they aren't set in the new task description.

Test: Open Maps, go home, rotate, open maps again, make sure
navigation bar is black
Bug: 36703868

Change-Id: If3f8948fe81af324411c2e828834f5d81e3eeddd
This commit is contained in:
Jorim Jaggi
2017-04-10 18:39:04 -07:00
parent 30d64f3a93
commit f4156ea642
2 changed files with 22 additions and 1 deletions

View File

@@ -5866,7 +5866,7 @@ public class Activity extends ContextThemeWrapper
*/
public void setTaskDescription(ActivityManager.TaskDescription taskDescription) {
if (mTaskDescription != taskDescription) {
mTaskDescription.copyFrom(taskDescription);
mTaskDescription.copyFromPreserveHiddenFields(taskDescription);
// Scale the icon down to something reasonable if it is provided
if (taskDescription.getIconFilename() == null && taskDescription.getIcon() != null) {
final int size = ActivityManager.getLauncherLargeIconSizeInner(this);

View File

@@ -1222,6 +1222,27 @@ public class ActivityManager {
mNavigationBarColor = other.mNavigationBarColor;
}
/**
* Copies this the values from another TaskDescription, but preserves the hidden fields
* if they weren't set on {@code other}
* @hide
*/
public void copyFromPreserveHiddenFields(TaskDescription other) {
mLabel = other.mLabel;
mIcon = other.mIcon;
mIconFilename = other.mIconFilename;
mColorPrimary = other.mColorPrimary;
if (other.mColorBackground != 0) {
mColorBackground = other.mColorBackground;
}
if (other.mStatusBarColor != 0) {
mStatusBarColor = other.mStatusBarColor;
}
if (other.mNavigationBarColor != 0) {
mNavigationBarColor = other.mNavigationBarColor;
}
}
private TaskDescription(Parcel source) {
readFromParcel(source);
}