From 3dd5bd7bc5df5fda2775e9e85c521790e3c6edb0 Mon Sep 17 00:00:00 2001 From: Nils Andreas Svee Date: Thu, 9 Oct 2014 17:54:04 +0200 Subject: [PATCH 1/3] Add forceLayoutInjection to EFragment --- .../androidannotations/annotations/EFragment.java | 2 ++ .../handler/EFragmentHandler.java | 4 +++- .../holder/EFragmentHolder.java | 15 +++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/EFragment.java b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/EFragment.java index f0d7cc029a..67cf4cb997 100644 --- a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/EFragment.java +++ b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/EFragment.java @@ -105,5 +105,7 @@ public @interface EFragment { int value() default ResId.DEFAULT_VALUE; + boolean forceLayoutInjection() default false; + String resName() default ""; } diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/EFragmentHandler.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/EFragmentHandler.java index 08444366b6..462b5f9d60 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/EFragmentHandler.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/EFragmentHandler.java @@ -16,6 +16,7 @@ package org.androidannotations.handler; import com.sun.codemodel.JBlock; +import com.sun.codemodel.JExpr; import com.sun.codemodel.JFieldRef; import com.sun.codemodel.JFieldVar; import com.sun.codemodel.JVar; @@ -73,8 +74,9 @@ public void process(Element element, EFragmentHolder holder) { JVar container = holder.getContainer(); JFieldVar contentView = holder.getContentView(); + JFieldVar forceLayoutInjection = holder.getForceLayoutInjection(); - block._if(contentView.eq(_null())) // + block._if(contentView.eq(_null()).cor(forceLayoutInjection.eq(JExpr.TRUE))) // ._then() // .assign(contentView, inflater.invoke("inflate").arg(contentViewId).arg(container).arg(FALSE)); } diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/EFragmentHolder.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/EFragmentHolder.java index cb4c37fd86..02860b5908 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/EFragmentHolder.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/EFragmentHolder.java @@ -27,6 +27,7 @@ import com.sun.codemodel.JMod; import com.sun.codemodel.JTypeVar; import com.sun.codemodel.JVar; +import org.androidannotations.annotations.EFragment; import org.androidannotations.helper.ActionBarSherlockHelper; import org.androidannotations.helper.AnnotationHelper; import org.androidannotations.process.ProcessHolder; @@ -54,6 +55,7 @@ public class EFragmentHolder extends EComponentWithViewSupportHolder implements private JVar container; private JDefinedClass fragmentBuilderClass; private JClass narrowBuilderClass; + private JFieldVar forceLayoutInjection; private JFieldRef fragmentArgumentsBuilderField; private JMethod injectArgsMethod; private JBlock injectArgsBlock; @@ -228,6 +230,7 @@ protected void setInit() { public JFieldVar getContentView() { if (contentView == null) { setContentView(); + setForceLayoutInjection(); setOnCreateView(); setOnDestroyView(); } @@ -238,6 +241,17 @@ private void setContentView() { contentView = generatedClass.field(PRIVATE, classes().VIEW, "contentView_"); } + public JFieldVar getForceLayoutInjection() { + if (forceLayoutInjection == null) { + setForceLayoutInjection(); + } + return forceLayoutInjection; + } + + private void setForceLayoutInjection() { + forceLayoutInjection = generatedClass.field(PRIVATE, boolean.class, "forceLayoutInjection_"); + } + private void setOnCreateView() { JMethod onCreateView = generatedClass.method(PUBLIC, classes().VIEW, "onCreateView"); onCreateView.annotate(Override.class); @@ -249,6 +263,7 @@ private void setOnCreateView() { JBlock body = onCreateView.body(); body.assign(contentView, _super().invoke(onCreateView).arg(inflater).arg(container).arg(savedInstanceState)); + body.assign(forceLayoutInjection, JExpr.lit(getAnnotatedElement().getAnnotation(EFragment.class).forceLayoutInjection())); setContentViewBlock = body.block(); From fd66f6a4b274266b421c261187c0e3333ce59209 Mon Sep 17 00:00:00 2001 From: Nils Andreas Svee Date: Thu, 9 Oct 2014 21:00:33 +0200 Subject: [PATCH 2/3] Handle forcing on generation time --- .../handler/EFragmentHandler.java | 14 +++++++++---- .../holder/EFragmentHolder.java | 20 +++++-------------- 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/EFragmentHandler.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/EFragmentHandler.java index 462b5f9d60..956539f079 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/EFragmentHandler.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/EFragmentHandler.java @@ -74,11 +74,17 @@ public void process(Element element, EFragmentHolder holder) { JVar container = holder.getContainer(); JFieldVar contentView = holder.getContentView(); - JFieldVar forceLayoutInjection = holder.getForceLayoutInjection(); - block._if(contentView.eq(_null()).cor(forceLayoutInjection.eq(JExpr.TRUE))) // - ._then() // - .assign(contentView, inflater.invoke("inflate").arg(contentViewId).arg(container).arg(FALSE)); + boolean forceInjection = element.getAnnotation(EFragment.class).forceLayoutInjection(); + + if (!forceInjection) { + block._if(contentView.eq(_null())) // + ._then() // + .assign(contentView, inflater.invoke("inflate").arg(contentViewId).arg(container).arg(FALSE)); + } else { + block.assign(contentView, inflater.invoke("inflate").arg(contentViewId).arg(container).arg(FALSE)); + } + } } diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/EFragmentHolder.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/EFragmentHolder.java index 02860b5908..c466fc8c0b 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/EFragmentHolder.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/EFragmentHolder.java @@ -55,7 +55,6 @@ public class EFragmentHolder extends EComponentWithViewSupportHolder implements private JVar container; private JDefinedClass fragmentBuilderClass; private JClass narrowBuilderClass; - private JFieldVar forceLayoutInjection; private JFieldRef fragmentArgumentsBuilderField; private JMethod injectArgsMethod; private JBlock injectArgsBlock; @@ -230,7 +229,6 @@ protected void setInit() { public JFieldVar getContentView() { if (contentView == null) { setContentView(); - setForceLayoutInjection(); setOnCreateView(); setOnDestroyView(); } @@ -241,17 +239,6 @@ private void setContentView() { contentView = generatedClass.field(PRIVATE, classes().VIEW, "contentView_"); } - public JFieldVar getForceLayoutInjection() { - if (forceLayoutInjection == null) { - setForceLayoutInjection(); - } - return forceLayoutInjection; - } - - private void setForceLayoutInjection() { - forceLayoutInjection = generatedClass.field(PRIVATE, boolean.class, "forceLayoutInjection_"); - } - private void setOnCreateView() { JMethod onCreateView = generatedClass.method(PUBLIC, classes().VIEW, "onCreateView"); onCreateView.annotate(Override.class); @@ -261,9 +248,12 @@ private void setOnCreateView() { JVar savedInstanceState = onCreateView.param(classes().BUNDLE, "savedInstanceState"); + boolean forceInjection = getAnnotatedElement().getAnnotation(EFragment.class).forceLayoutInjection(); + JBlock body = onCreateView.body(); - body.assign(contentView, _super().invoke(onCreateView).arg(inflater).arg(container).arg(savedInstanceState)); - body.assign(forceLayoutInjection, JExpr.lit(getAnnotatedElement().getAnnotation(EFragment.class).forceLayoutInjection())); + + if (!forceInjection) + body.assign(contentView, _super().invoke(onCreateView).arg(inflater).arg(container).arg(savedInstanceState)); setContentViewBlock = body.block(); From 970b031bc8ae3b0181fd2ac5134ac3d1f803ef5c Mon Sep 17 00:00:00 2001 From: Nils Andreas Svee Date: Thu, 9 Oct 2014 21:09:32 +0200 Subject: [PATCH 3/3] Removed unused import --- .../java/org/androidannotations/handler/EFragmentHandler.java | 1 - 1 file changed, 1 deletion(-) diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/EFragmentHandler.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/EFragmentHandler.java index 956539f079..b47b458734 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/EFragmentHandler.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/EFragmentHandler.java @@ -16,7 +16,6 @@ package org.androidannotations.handler; import com.sun.codemodel.JBlock; -import com.sun.codemodel.JExpr; import com.sun.codemodel.JFieldRef; import com.sun.codemodel.JFieldVar; import com.sun.codemodel.JVar;