diff options
author | Adam Powell <adamp@google.com> | 2014-07-01 15:22:50 -0700 |
---|---|---|
committer | Adam Powell <adamp@google.com> | 2014-07-01 15:39:28 -0700 |
commit | d76008352eeb246af76ba4a81eaeb4901ca4ef7f (patch) | |
tree | 97d32b8f43d8603fef4a279f8989aa68af8f54bb /core/java | |
parent | 009edbb2769135dbab9ab6615354de288c5d47f5 (diff) | |
download | frameworks_base-d76008352eeb246af76ba4a81eaeb4901ca4ef7f.zip frameworks_base-d76008352eeb246af76ba4a81eaeb4901ca4ef7f.tar.gz frameworks_base-d76008352eeb246af76ba4a81eaeb4901ca4ef7f.tar.bz2 |
Remove ActionBar.LayoutParams MarginLayoutParams constructor
Adding this for L caused some fun issues with source compatibility.
Apps that previously passed another MarginLayoutParams subclass to
ActionBar.LayoutParams' constructor started statically linking to a
constructor overload that did not exist on older platform changes with
no other source changes. In the interests of avoiding these headaches
for developers, remove it.
Bug 15933193
Change-Id: I01cf8dfa2341b9d9629331639433b59352e7e15a
Diffstat (limited to 'core/java')
-rw-r--r-- | core/java/android/app/ActionBar.java | 12 | ||||
-rw-r--r-- | core/java/android/view/ViewGroup.java | 14 | ||||
-rw-r--r-- | core/java/android/widget/Toolbar.java | 7 |
3 files changed, 30 insertions, 3 deletions
diff --git a/core/java/android/app/ActionBar.java b/core/java/android/app/ActionBar.java index 628875f..5c98180 100644 --- a/core/java/android/app/ActionBar.java +++ b/core/java/android/app/ActionBar.java @@ -1334,8 +1334,14 @@ public abstract class ActionBar { super(source); } - public LayoutParams(MarginLayoutParams source) { - super(source); - } + /* + * Note for framework developers: + * + * You might notice that ActionBar.LayoutParams is missing a constructor overload + * for MarginLayoutParams. While it may seem like a good idea to add one, at this + * point it's dangerous for source compatibility. Upon building against a new + * version of the SDK an app can end up statically linking to the new MarginLayoutParams + * overload, causing a crash when running on older platform versions with no other changes. + */ } } diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index 28e8bd6..36e5996 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -6476,6 +6476,20 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } /** + * @hide Used internally. + */ + public final void copyMarginsFrom(MarginLayoutParams source) { + this.leftMargin = source.leftMargin; + this.topMargin = source.topMargin; + this.rightMargin = source.rightMargin; + this.bottomMargin = source.bottomMargin; + this.startMargin = source.startMargin; + this.endMargin = source.endMargin; + + this.mMarginFlags = source.mMarginFlags; + } + + /** * Sets the margins, in pixels. A call to {@link android.view.View#requestLayout()} needs * to be done so that the new margins are taken into account. Left and right margins may be * overriden by {@link android.view.View#requestLayout()} depending on layout direction. diff --git a/core/java/android/widget/Toolbar.java b/core/java/android/widget/Toolbar.java index 122df2c..d140c82 100644 --- a/core/java/android/widget/Toolbar.java +++ b/core/java/android/widget/Toolbar.java @@ -1585,6 +1585,10 @@ public class Toolbar extends ViewGroup { /** * Layout information for child views of Toolbars. * + * <p>Toolbar.LayoutParams extends ActionBar.LayoutParams for compatibility with existing + * ActionBar API. See {@link android.app.Activity#setActionBar(Toolbar) Activity.setActionBar} + * for more info on how to use a Toolbar as your Activity's ActionBar.</p> + * * @attr ref android.R.styleable#Toolbar_LayoutParams_layout_gravity */ public static class LayoutParams extends ActionBar.LayoutParams { @@ -1624,6 +1628,9 @@ public class Toolbar extends ViewGroup { public LayoutParams(MarginLayoutParams source) { super(source); + // ActionBar.LayoutParams doesn't have a MarginLayoutParams constructor. + // Fake it here and copy over the relevant data. + copyMarginsFrom(source); } public LayoutParams(ViewGroup.LayoutParams source) { |