diff options
| author | 2014-08-26 18:06:40 -0700 | |
|---|---|---|
| committer | 2014-08-26 18:28:17 -0700 | |
| commit | af2d85973ed768e390bc2f40f255ea39cc6f6fe5 (patch) | |
| tree | d9764231b50f8433e5fb58b99b3ae5fe90f74607 | |
| parent | 412e4e203f9675300c1fc8aa444a49360a5423c0 (diff) | |
Adjust toolbar/action bar title handling
Treat activity title changes as window title changes when propagating
to action bars. This gives it lower priority if a "hard" title has
been set. Fix some lifecycle handling around this that previously
resulted in multiple calls.
Automatically detect the starting display options for a
ToolbarWidgetWrapper if we're not grabbing them from styles. This
prevents setTitle and friends from going totally out to lunch if
constructed around a Toolbar with no starting title.
Bug 17138048
Change-Id: I9f58a3d222546745c8aa873e996b8f0d52a0ad21
5 files changed, 28 insertions, 3 deletions
diff --git a/core/java/android/app/ActionBar.java b/core/java/android/app/ActionBar.java index b74c8249c72c..014a7af130e0 100644 --- a/core/java/android/app/ActionBar.java +++ b/core/java/android/app/ActionBar.java @@ -1061,6 +1061,10 @@ public abstract class ActionBar { return false; } + /** @hide */ + public void setWindowTitle(CharSequence title) { + } + /** * Listener interface for ActionBar navigation events. * diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index 2e66a4c97995..b1cf5b5b1cf0 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -5019,9 +5019,9 @@ public class Activity extends ContextThemeWrapper win.setTitleColor(color); } } - } - if (mActionBar != null) { - mActionBar.setTitle(title); + if (mActionBar != null) { + mActionBar.setWindowTitle(title); + } } } diff --git a/core/java/com/android/internal/app/ToolbarActionBar.java b/core/java/com/android/internal/app/ToolbarActionBar.java index 13eb18205890..abe8a9f26313 100644 --- a/core/java/com/android/internal/app/ToolbarActionBar.java +++ b/core/java/com/android/internal/app/ToolbarActionBar.java @@ -226,6 +226,11 @@ public class ToolbarActionBar extends ActionBar { } @Override + public void setWindowTitle(CharSequence title) { + mDecorToolbar.setWindowTitle(title); + } + + @Override public void setSubtitle(CharSequence subtitle) { mDecorToolbar.setSubtitle(subtitle); } diff --git a/core/java/com/android/internal/app/WindowDecorActionBar.java b/core/java/com/android/internal/app/WindowDecorActionBar.java index b58e1dbe25b4..a8f7bb391412 100644 --- a/core/java/com/android/internal/app/WindowDecorActionBar.java +++ b/core/java/com/android/internal/app/WindowDecorActionBar.java @@ -431,6 +431,11 @@ public class WindowDecorActionBar extends ActionBar implements mDecorToolbar.setTitle(title); } + @Override + public void setWindowTitle(CharSequence title) { + mDecorToolbar.setWindowTitle(title); + } + public void setSubtitle(CharSequence subtitle) { mDecorToolbar.setSubtitle(subtitle); } diff --git a/core/java/com/android/internal/widget/ToolbarWidgetWrapper.java b/core/java/com/android/internal/widget/ToolbarWidgetWrapper.java index 5da5ae918c6b..250bbac1067e 100644 --- a/core/java/com/android/internal/widget/ToolbarWidgetWrapper.java +++ b/core/java/com/android/internal/widget/ToolbarWidgetWrapper.java @@ -162,6 +162,8 @@ public class ToolbarWidgetWrapper implements DecorToolbar { } a.recycle(); + } else { + mDisplayOpts = detectDisplayOptions(); } if (TextUtils.isEmpty(mToolbar.getNavigationContentDescription())) { @@ -181,6 +183,15 @@ public class ToolbarWidgetWrapper implements DecorToolbar { }); } + private int detectDisplayOptions() { + int opts = ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_HOME | + ActionBar.DISPLAY_USE_LOGO; + if (mToolbar.getNavigationIcon() != null) { + opts |= ActionBar.DISPLAY_HOME_AS_UP; + } + return opts; + } + @Override public ViewGroup getViewGroup() { return mToolbar; |