diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/helper/CanonicalNameConstants.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/helper/CanonicalNameConstants.java index 6f99a64d65..c60708561f 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/helper/CanonicalNameConstants.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/helper/CanonicalNameConstants.java @@ -143,6 +143,25 @@ public final class CanonicalNameConstants { public static final String VIEW_PAGER = "android.support.v4.view.ViewPager"; public static final String PAGE_CHANGE_LISTENER = "android.support.v4.view.ViewPager.OnPageChangeListener"; + /* + * Android X + */ + public static final String ANDROIDX_ACTIVITY_COMPAT = "androidx.core.app.ActivityCompat"; + public static final String ANDROIDX_FRAGMENT = "androidx.fragment.app.Fragment"; + public static final String ANDROIDX_FRAGMENT_ACTIVITY = "androidx.fragment.app.FragmentActivity"; + public static final String ANDROIDX_LOCAL_BROADCAST_MANAGER = "androidx.localbroadcastmanager.content.LocalBroadcastManager"; + public static final String ANDROIDX_CONTEXT_COMPAT = "androidx.core.content.ContextCompat"; + public static final String ANDROIDX_PREFERENCE = "androidx.preference.Preference"; + public static final String ANDROIDX_PREFERENCE_FRAGMENT = "androidx.preference.PreferenceFragment"; + public static final String ANDROIDX_PREFERENCE_FRAGMENTCOMPAT = "androidx.preference.PreferenceFragmentCompat"; + public static final String ANDROIDX_PREFERENCE_CLICK_LISTENER = "androidx.preference.Preference.OnPreferenceClickListener"; + public static final String ANDROIDX_PREFERENCE_CHANGE_LISTENER = "androidx.preference.Preference.OnPreferenceChangeListener"; + public static final String ANDROIDX_APPCOMPAT_ACTIVITY = "androidx.appcompat.app.AppCompatActivity"; + public static final String ANDROIDX_VIEW_PAGER = "androidx.viewpager.widget.ViewPager"; + public static final String ANDROIDX_PAGE_CHANGE_LISTENER = "androidx.viewpager.widget.ViewPager.OnPageChangeListener"; + public static final String ANDROIDX_DATA_BINDING_UTIL = "androidx.databinding.DataBindingUtil"; + public static final String ANDROIDX_VIEW_DATA_BINDING = "androidx.databinding.ViewDataBinding"; + /* * Android permission */ diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/helper/ValidatorHelper.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/helper/ValidatorHelper.java index 8f06e83203..04be4ab4eb 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/helper/ValidatorHelper.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/helper/ValidatorHelper.java @@ -67,13 +67,13 @@ @SuppressWarnings("checkstyle:methodcount") public class ValidatorHelper { - private static final List ANDROID_FRAGMENT_QUALIFIED_NAMES = asList(CanonicalNameConstants.FRAGMENT, CanonicalNameConstants.SUPPORT_V4_FRAGMENT); + private static final List ANDROID_FRAGMENT_QUALIFIED_NAMES = asList(CanonicalNameConstants.FRAGMENT, CanonicalNameConstants.SUPPORT_V4_FRAGMENT, CanonicalNameConstants.ANDROIDX_FRAGMENT); private static final Collection VALID_LOG_LEVELS = asList(LOG_VERBOSE, LOG_DEBUG, LOG_INFO, LOG_WARN, LOG_ERROR); private static final List VALID_PREFERENCE_CLASSES = asList(CanonicalNameConstants.PREFERENCE_ACTIVITY, CanonicalNameConstants.PREFERENCE_FRAGMENT, CanonicalNameConstants.SUPPORT_V4_PREFERENCE_FRAGMENT, CanonicalNameConstants.MACHINARIUS_V4_PREFERENCE_FRAGMENT, CanonicalNameConstants.SUPPORT_V7_PREFERENCE_FRAGMENTCOMPAT, - CanonicalNameConstants.SUPPORT_V14_PREFERENCE_FRAGMENT); + CanonicalNameConstants.SUPPORT_V14_PREFERENCE_FRAGMENT, CanonicalNameConstants.ANDROIDX_PREFERENCE_FRAGMENT, CanonicalNameConstants.ANDROIDX_PREFERENCE_FRAGMENTCOMPAT); protected final TargetAnnotationHelper annotationHelper; private final ParcelerHelper parcelerHelper; @@ -500,7 +500,7 @@ public void extendsListOfView(Element element, ElementValidation valid) { } public void extendsPreference(Element element, ElementValidation validation) { - extendsOneOfTypes(element, asList(CanonicalNameConstants.PREFERENCE, CanonicalNameConstants.SUPPORT_V7_PREFERENCE), validation); + extendsOneOfTypes(element, asList(CanonicalNameConstants.PREFERENCE, CanonicalNameConstants.SUPPORT_V7_PREFERENCE, CanonicalNameConstants.ANDROIDX_PREFERENCE), validation); } public void extendsOneOfTypes(Element element, List typeQualifiedNames, ElementValidation valid) { @@ -766,8 +766,9 @@ public void isPreferenceFragmentClassPresent(Element element, ElementValidation } public void isViewPagerClassPresent(ElementValidation validation) { - if (!isClassPresent(CanonicalNameConstants.VIEW_PAGER)) { - validation.addError("The class " + CanonicalNameConstants.VIEW_PAGER + " cannot be found. You have to include support v4 library"); + if (!isClassPresent(CanonicalNameConstants.VIEW_PAGER) && !isClassPresent(CanonicalNameConstants.ANDROIDX_VIEW_PAGER)) { + validation.addError("The classes " + CanonicalNameConstants.VIEW_PAGER + " and " + CanonicalNameConstants.ANDROIDX_VIEW_PAGER + + " cannot be found. You have to include support-v4 or androidx.viewpager library"); } } } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/DataBindingDelegate.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/DataBindingDelegate.java index 32683c33bb..950fe1e466 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/DataBindingDelegate.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/DataBindingDelegate.java @@ -17,6 +17,9 @@ import static org.androidannotations.helper.ModelConstants.generationSuffix; +import org.androidannotations.helper.CanonicalNameConstants; + +import com.helger.jcodemodel.AbstractJClass; import com.helger.jcodemodel.IJExpression; import com.helger.jcodemodel.JFieldVar; import com.helger.jcodemodel.JMod; @@ -38,11 +41,19 @@ JFieldVar getDataBindingField() { } private void setDataBindingField() { - dataBindingField = holder.generatedClass.field(JMod.PRIVATE, getClasses().VIEW_DATA_BINDING, "viewDataBinding" + generationSuffix()); + AbstractJClass viewDataBinding = getClasses().VIEW_DATA_BINDING; + if (getEnvironment().getProcessingEnvironment().getElementUtils().getTypeElement(CanonicalNameConstants.ANDROIDX_VIEW_DATA_BINDING) != null) { + viewDataBinding = getClasses().ANDROIDX_VIEW_DATA_BINDING; + } + dataBindingField = holder.generatedClass.field(JMod.PRIVATE, viewDataBinding, "viewDataBinding" + generationSuffix()); } IJExpression getDataBindingInflationExpression(IJExpression contentViewId, IJExpression container, boolean attachToRoot) { - return getClasses().DATA_BINDING_UTIL.staticInvoke("inflate") // + AbstractJClass dataBindingUtil = getClasses().DATA_BINDING_UTIL; + if (getEnvironment().getProcessingEnvironment().getElementUtils().getTypeElement(CanonicalNameConstants.ANDROIDX_DATA_BINDING_UTIL) != null) { + dataBindingUtil = getClasses().ANDROIDX_DATA_BINDING_UTIL; + } + return dataBindingUtil.staticInvoke("inflate") // .arg(getClasses().LAYOUT_INFLATER.staticInvoke("from").arg(holder.getContextRef())) // .arg(contentViewId) // .arg(container) // diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EActivityHolder.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EActivityHolder.java index c56395106a..2921ad8da5 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EActivityHolder.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EActivityHolder.java @@ -334,7 +334,12 @@ protected void setFindNativeFragmentById() { @Override protected void setFindSupportFragmentById() { - JMethod method = generatedClass.method(PRIVATE, getClasses().SUPPORT_V4_FRAGMENT, "findSupportFragmentById"); + JMethod method; + if (getProcessingEnvironment().getElementUtils().getTypeElement(CanonicalNameConstants.ANDROIDX_FRAGMENT) == null) { + method = getGeneratedClass().method(PRIVATE, getClasses().SUPPORT_V4_FRAGMENT, "findSupportFragmentById"); + } else { + method = getGeneratedClass().method(PRIVATE, getClasses().ANDROIDX_FRAGMENT, "findSupportFragmentById"); + } JVar idParam = method.param(getCodeModel().INT, "id"); JBlock body = method.body(); body._return(invoke("getSupportFragmentManager").invoke("findFragmentById").arg(idParam)); @@ -352,7 +357,12 @@ protected void setFindNativeFragmentByTag() { @Override protected void setFindSupportFragmentByTag() { - JMethod method = generatedClass.method(PRIVATE, getClasses().SUPPORT_V4_FRAGMENT, "findSupportFragmentByTag"); + JMethod method; + if (getProcessingEnvironment().getElementUtils().getTypeElement(CanonicalNameConstants.ANDROIDX_FRAGMENT) == null) { + method = getGeneratedClass().method(PRIVATE, getClasses().SUPPORT_V4_FRAGMENT, "findSupportFragmentByTag"); + } else { + method = getGeneratedClass().method(PRIVATE, getClasses().ANDROIDX_FRAGMENT, "findSupportFragmentByTag"); + } JVar tagParam = method.param(getClasses().STRING, "tag"); JBlock body = method.body(); body._return(invoke("getSupportFragmentManager").invoke("findFragmentByTag").arg(tagParam)); @@ -583,7 +593,7 @@ public JMethod getGetLastNonConfigurationInstance() throws JClassAlreadyExistsEx private void setGetLastNonConfigurationInstance() throws JClassAlreadyExistsException { AnnotationHelper annotationHelper = new AnnotationHelper(getEnvironment()); - TypeElement fragmentActivityTypeElement = annotationHelper.typeElementFromQualifiedName(CanonicalNameConstants.FRAGMENT_ACTIVITY); + TypeElement fragmentActivityTypeElement = getFragmentActivity(annotationHelper); TypeElement typeElement = annotationHelper.typeElementFromQualifiedName(generatedClass._extends().fullName()); String getLastNonConfigurationInstanceName = "getLastNonConfigurationInstance"; if (fragmentActivityTypeElement != null && annotationHelper.isSubtype(typeElement.asType(), fragmentActivityTypeElement.asType())) { @@ -618,7 +628,7 @@ public JVar getOnRetainNonConfigurationInstance() throws JClassAlreadyExistsExce private void setOnRetainNonConfigurationInstance() throws JClassAlreadyExistsException { AnnotationHelper annotationHelper = new AnnotationHelper(getEnvironment()); - TypeElement fragmentActivityTypeElement = annotationHelper.typeElementFromQualifiedName(CanonicalNameConstants.FRAGMENT_ACTIVITY); + TypeElement fragmentActivityTypeElement = getFragmentActivity(annotationHelper); TypeElement typeElement = annotationHelper.typeElementFromQualifiedName(generatedClass._extends().fullName()); String onRetainNonConfigurationInstanceName = "onRetainNonConfigurationInstance"; @@ -639,6 +649,14 @@ private void setOnRetainNonConfigurationInstance() throws JClassAlreadyExistsExc methodBody._return(onRetainNonConfigurationInstance); } + private TypeElement getFragmentActivity(AnnotationHelper annotationHelper) { + TypeElement supportFragmentActivity = annotationHelper.typeElementFromQualifiedName(CanonicalNameConstants.FRAGMENT_ACTIVITY); + if (supportFragmentActivity == null) { + return annotationHelper.typeElementFromQualifiedName(CanonicalNameConstants.ANDROIDX_FRAGMENT_ACTIVITY); + } + return supportFragmentActivity; + } + @Override public JBlock getOnActivityResultCaseBlock(int requestCode) { return onActivityResultDelegate.getCaseBlock(requestCode); @@ -776,6 +794,11 @@ public boolean usingSupportV7Preference() { return preferencesHolder.usingSupportV7Preference(); } + @Override + public boolean usingAndroidxPreference() { + return preferencesHolder.usingAndroidxPreference(); + } + public AbstractJClass getBasePreferenceClass() { return preferencesHolder.getBasePreferenceClass(); } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EComponentWithViewSupportHolder.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EComponentWithViewSupportHolder.java index 8b39cfa1e8..57ab9d68fa 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EComponentWithViewSupportHolder.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EComponentWithViewSupportHolder.java @@ -30,11 +30,13 @@ import javax.lang.model.element.TypeElement; import javax.lang.model.type.TypeMirror; +import javax.lang.model.util.Elements; import org.androidannotations.AndroidAnnotationsEnvironment; import org.androidannotations.api.view.HasViews; import org.androidannotations.api.view.OnViewChangedListener; import org.androidannotations.api.view.OnViewChangedNotifier; +import org.androidannotations.helper.CanonicalNameConstants; import org.androidannotations.internal.helper.ViewNotifierHelper; import com.helger.jcodemodel.AbstractJClass; @@ -207,18 +209,32 @@ public JMethod getFindSupportFragmentById() { } protected void setFindSupportFragmentById() { - findSupportFragmentById = getGeneratedClass().method(PRIVATE, getClasses().SUPPORT_V4_FRAGMENT, "findSupportFragmentById"); + if (getProcessingEnvironment().getElementUtils().getTypeElement(CanonicalNameConstants.ANDROIDX_FRAGMENT) == null) { + findSupportFragmentById = getGeneratedClass().method(PRIVATE, getClasses().SUPPORT_V4_FRAGMENT, "findSupportFragmentById"); + } else { + findSupportFragmentById = getGeneratedClass().method(PRIVATE, getClasses().ANDROIDX_FRAGMENT, "findSupportFragmentById"); + } JVar idParam = findSupportFragmentById.param(getCodeModel().INT, "id"); JBlock body = findSupportFragmentById.body(); - body._if(getContextRef()._instanceof(getClasses().FRAGMENT_ACTIVITY).not())._then()._return(_null()); + AbstractJClass fragmentActivity = getFragmentActivity(); + body._if(getContextRef()._instanceof(fragmentActivity).not())._then()._return(_null()); - JVar activityVar = body.decl(getClasses().FRAGMENT_ACTIVITY, "activity_", cast(getClasses().FRAGMENT_ACTIVITY, getContextRef())); + JVar activityVar = body.decl(fragmentActivity, "activity_", cast(fragmentActivity, getContextRef())); body._return(activityVar.invoke("getSupportFragmentManager").invoke("findFragmentById").arg(idParam)); } + private AbstractJClass getFragmentActivity() { + Elements elementUtils = getProcessingEnvironment().getElementUtils(); + if (elementUtils.getTypeElement(CanonicalNameConstants.ANDROIDX_FRAGMENT_ACTIVITY) != null) { + return getClasses().ANDROIDX_FRAGMENT_ACTIVITY; + } else { + return getClasses().FRAGMENT_ACTIVITY; + } + } + public JMethod getFindNativeFragmentByTag() { if (findNativeFragmentByTag == null) { setFindNativeFragmentByTag(); @@ -247,14 +263,19 @@ public JMethod getFindSupportFragmentByTag() { } protected void setFindSupportFragmentByTag() { - findSupportFragmentByTag = getGeneratedClass().method(PRIVATE, getClasses().SUPPORT_V4_FRAGMENT, "findSupportFragmentByTag"); + if (getProcessingEnvironment().getElementUtils().getTypeElement(CanonicalNameConstants.ANDROIDX_FRAGMENT) == null) { + findSupportFragmentByTag = getGeneratedClass().method(PRIVATE, getClasses().SUPPORT_V4_FRAGMENT, "findSupportFragmentByTag"); + } else { + findSupportFragmentByTag = getGeneratedClass().method(PRIVATE, getClasses().ANDROIDX_FRAGMENT, "findSupportFragmentByTag"); + } JVar tagParam = findSupportFragmentByTag.param(getClasses().STRING, "tag"); JBlock body = findSupportFragmentByTag.body(); - body._if(getContextRef()._instanceof(getClasses().FRAGMENT_ACTIVITY).not())._then()._return(_null()); + AbstractJClass fragmentActivity = getFragmentActivity(); + body._if(getContextRef()._instanceof(fragmentActivity).not())._then()._return(_null()); - JVar activityVar = body.decl(getClasses().FRAGMENT_ACTIVITY, "activity_", cast(getClasses().FRAGMENT_ACTIVITY, getContextRef())); + JVar activityVar = body.decl(fragmentActivity, "activity_", cast(fragmentActivity, getContextRef())); body._return(activityVar.invoke("getSupportFragmentManager").invoke("findFragmentByTag").arg(tagParam)); } @@ -279,7 +300,7 @@ private TextWatcherHolder createTextWatcherHolder(JFieldRef idRef, TypeMirror vi JBlock onViewChangedBody = getOnViewChangedBodyInjectionBlock().blockSimple(); JVar viewVariable = onViewChangedBody.decl(FINAL, viewClass, "view", cast(viewClass, findViewById(idRef))); onViewChangedBody._if(viewVariable.ne(JExpr._null()))._then() // - .invoke(viewVariable, "addTextChangedListener").arg(_new(onTextChangeListenerClass)); + .invoke(viewVariable, "addTextChangedListener").arg(_new(onTextChangeListenerClass)); return new TextWatcherHolder(this, viewVariable, onTextChangeListenerClass); } @@ -315,8 +336,15 @@ public PageChangeHolder getPageChangeHolder(JFieldRef idRef, TypeMirror viewPara } private PageChangeHolder createPageChangeHolder(JFieldRef idRef, TypeMirror viewParameterType, boolean hasAddOnPageChangeListenerMethod) { - JDefinedClass onPageChangeListenerClass = getCodeModel().anonymousClass(getClasses().PAGE_CHANGE_LISTENER); - AbstractJClass viewClass = getClasses().VIEW_PAGER; + AbstractJClass viewClass; + JDefinedClass onPageChangeListenerClass; + if (getProcessingEnvironment().getElementUtils().getTypeElement(CanonicalNameConstants.ANDROIDX_VIEW_PAGER) == null) { + viewClass = getClasses().VIEW_PAGER; + onPageChangeListenerClass = getCodeModel().anonymousClass(getClasses().PAGE_CHANGE_LISTENER); + } else { + viewClass = getClasses().ANDROIDX_VIEW_PAGER; + onPageChangeListenerClass = getCodeModel().anonymousClass(getClasses().ANDROIDX_PAGE_CHANGE_LISTENER); + } if (viewParameterType != null) { viewClass = getJClass(viewParameterType.toString()); } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EFragmentHolder.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EFragmentHolder.java index 6aba6779e9..0f29cd4613 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EFragmentHolder.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EFragmentHolder.java @@ -597,6 +597,11 @@ public boolean usingSupportV7Preference() { return preferencesDelegate.usingSupportV7Preference(); } + @Override + public boolean usingAndroidxPreference() { + return preferencesDelegate.usingAndroidxPreference(); + } + public AbstractJClass getBasePreferenceClass() { return preferencesDelegate.getBasePreferenceClass(); } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/HasPreferences.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/HasPreferences.java index a277cb7ece..74ae68e54e 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/HasPreferences.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/HasPreferences.java @@ -34,5 +34,7 @@ public interface HasPreferences extends GeneratedClassHolder { boolean usingSupportV7Preference(); + boolean usingAndroidxPreference(); + AbstractJClass getBasePreferenceClass(); } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/PreferencesDelegate.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/PreferencesDelegate.java index efea021adb..111c132138 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/PreferencesDelegate.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/PreferencesDelegate.java @@ -37,12 +37,13 @@ import com.helger.jcodemodel.JMethod; import com.helger.jcodemodel.JVar; -public class PreferencesDelegate extends GeneratedClassHolderDelegateimplements HasPreferences { +public class PreferencesDelegate extends GeneratedClassHolderDelegate implements HasPreferences { protected JBlock addPreferencesFromResourceInjectionBlock; protected JBlock addPreferencesFromResourceAfterInjectionBlock; private boolean usingSupportV7Preference = false; + private boolean usingAndroidxPreference = false; private AbstractJClass basePreferenceClass; public PreferencesDelegate(EComponentWithViewSupportHolder holder) { @@ -51,12 +52,17 @@ public PreferencesDelegate(EComponentWithViewSupportHolder holder) { Types typeUtils = holder.getEnvironment().getProcessingEnvironment().getTypeUtils(); TypeElement supportV7PreferenceFragmentCompat = elementUtils.getTypeElement(CanonicalNameConstants.SUPPORT_V7_PREFERENCE_FRAGMENTCOMPAT); - + TypeElement andoridxPreferenceFragmentCompat = elementUtils.getTypeElement(CanonicalNameConstants.ANDROIDX_PREFERENCE_FRAGMENTCOMPAT); TypeElement supportV14PreferenceFragment = elementUtils.getTypeElement(CanonicalNameConstants.SUPPORT_V14_PREFERENCE_FRAGMENT); + TypeElement andoridxPreferenceFragment = elementUtils.getTypeElement(CanonicalNameConstants.ANDROIDX_PREFERENCE_FRAGMENT); TypeMirror annotatedType = holder.getAnnotatedElement().asType(); - if (supportV7PreferenceFragmentCompat != null && typeUtils.isSubtype(annotatedType, supportV7PreferenceFragmentCompat.asType()) + if (andoridxPreferenceFragmentCompat != null && typeUtils.isSubtype(annotatedType, andoridxPreferenceFragmentCompat.asType()) + || andoridxPreferenceFragment != null && typeUtils.isSubtype(annotatedType, andoridxPreferenceFragment.asType())) { + usingAndroidxPreference = true; + basePreferenceClass = getClasses().ANDROIDX_PREFERENCE; + } else if (supportV7PreferenceFragmentCompat != null && typeUtils.isSubtype(annotatedType, supportV7PreferenceFragmentCompat.asType()) || supportV14PreferenceFragment != null && typeUtils.isSubtype(annotatedType, supportV14PreferenceFragment.asType())) { usingSupportV7Preference = true; basePreferenceClass = getClasses().SUPPORT_V7_PREFERENCE; @@ -117,6 +123,11 @@ public boolean usingSupportV7Preference() { return usingSupportV7Preference; } + @Override + public boolean usingAndroidxPreference() { + return usingAndroidxPreference; + } + @Override public AbstractJClass getBasePreferenceClass() { return basePreferenceClass; diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/AbstractPageChangeHandler.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/AbstractPageChangeHandler.java index d0b9ce07f3..3af75dda53 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/AbstractPageChangeHandler.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/AbstractPageChangeHandler.java @@ -18,6 +18,7 @@ import javax.lang.model.element.Element; import javax.lang.model.element.ExecutableElement; import javax.lang.model.element.TypeElement; +import javax.lang.model.type.TypeMirror; import org.androidannotations.AndroidAnnotationsEnvironment; import org.androidannotations.ElementValidation; @@ -51,6 +52,15 @@ protected void validate(Element element, ElementValidation validation) { protected boolean hasAddOnPageChangeListenerMethod() { TypeElement viewPager = getProcessingEnvironment().getElementUtils().getTypeElement(CanonicalNameConstants.VIEW_PAGER); - return hasTargetMethod(viewPager, "addOnPageChangeListener"); + TypeElement androidxViewPager = getProcessingEnvironment().getElementUtils().getTypeElement(CanonicalNameConstants.ANDROIDX_VIEW_PAGER); + return hasTargetMethod(viewPager, "addOnPageChangeListener") || hasTargetMethod(androidxViewPager, "addOnPageChangeListener"); + } + + protected boolean isViewPagerParameter(TypeMirror parameterType) { + TypeElement viewPagerTypeElement = annotationHelper.typeElementFromQualifiedName(CanonicalNameConstants.VIEW_PAGER); + TypeElement androidxViewPagerTypeElement = annotationHelper.typeElementFromQualifiedName(CanonicalNameConstants.ANDROIDX_VIEW_PAGER); + TypeMirror viewPagerType = viewPagerTypeElement == null ? null : viewPagerTypeElement.asType(); + TypeMirror androidxViewPagerType = androidxViewPagerTypeElement == null ? null : androidxViewPagerTypeElement.asType(); + return viewPagerType != null && annotationHelper.isSubtype(parameterType, viewPagerType) || androidxViewPagerType != null && annotationHelper.isSubtype(parameterType, androidxViewPagerType); } } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/BindingObjectHandler.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/BindingObjectHandler.java index 67eb2b877d..d9d03e55c4 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/BindingObjectHandler.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/BindingObjectHandler.java @@ -15,6 +15,8 @@ */ package org.androidannotations.internal.core.handler; +import static java.util.Arrays.asList; + import javax.lang.model.element.Element; import javax.lang.model.element.ElementKind; import javax.lang.model.element.ExecutableElement; @@ -49,7 +51,7 @@ protected void validate(Element element, ElementValidation validation) { if (element.getKind() == ElementKind.METHOD || element.getKind() == ElementKind.PARAMETER) { ExecutableElement methodElement = (ExecutableElement) (element.getKind() == ElementKind.METHOD ? element : element.getEnclosingElement()); - validatorHelper.param.extendsType(CanonicalNameConstants.VIEW_DATA_BINDING).validate(methodElement, validation); + validatorHelper.param.extendsAnyOfTypes(CanonicalNameConstants.VIEW_DATA_BINDING, CanonicalNameConstants.ANDROIDX_VIEW_DATA_BINDING).validate(methodElement, validation); if (!validation.isValid()) { return; @@ -60,7 +62,7 @@ protected void validate(Element element, ElementValidation validation) { if (validation.isValid()) { validatorHelper.isNotPrivate(element, validation); - validatorHelper.extendsType(injectHelper.getParam(element), CanonicalNameConstants.VIEW_DATA_BINDING, validation); + validatorHelper.extendsOneOfTypes(injectHelper.getParam(element), asList(CanonicalNameConstants.VIEW_DATA_BINDING, CanonicalNameConstants.ANDROIDX_VIEW_DATA_BINDING), validation); } } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/ContextCompatAwareResHandler.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/ContextCompatAwareResHandler.java index 1c6b9b54ef..841588aa27 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/ContextCompatAwareResHandler.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/ContextCompatAwareResHandler.java @@ -47,6 +47,8 @@ abstract class ContextCompatAwareResHandler extends AbstractResHandler { protected IJExpression getInstanceInvocation(EComponentHolder holder, JFieldRef idRef, IJAssignmentTarget fieldRef, JBlock targetBlock) { if (hasTargetMethodInContextCompat()) { return getClasses().CONTEXT_COMPAT.staticInvoke(androidRes.getResourceMethodName()).arg(holder.getContextRef()).arg(idRef); + } else if (hasTargetMethodInAndroidxContextCompat()) { + return getClasses().ANDROIDX_CONTEXT_COMPAT.staticInvoke(androidRes.getResourceMethodName()).arg(holder.getContextRef()).arg(idRef); } else if (shouldUseContextMethod()) { return holder.getContextRef().invoke(androidRes.getResourceMethodName()).arg(idRef); } else if (!shouldUseContextMethod() && hasTargetMethodInContext()) { @@ -72,6 +74,12 @@ private boolean hasTargetMethodInContextCompat() { return hasTargetMethod(contextCompat, androidRes.getResourceMethodName()); } + private boolean hasTargetMethodInAndroidxContextCompat() { + TypeElement contextCompat = getProcessingEnvironment().getElementUtils().getTypeElement(CanonicalNameConstants.ANDROIDX_CONTEXT_COMPAT); + + return hasTargetMethod(contextCompat, androidRes.getResourceMethodName()); + } + private IJExpression createCallWithIfGuard(EComponentHolder holder, JFieldRef idRef, IJAssignmentTarget fieldRef, JBlock targetBlock) { JVar resourcesRef = holder.getResourcesRef(); IJExpression buildVersionCondition = getClasses().BUILD_VERSION.staticRef("SDK_INT").gte(getClasses().BUILD_VERSION_CODES.staticRef(minSdkPlatformName)); diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PageScrollStateChangedHandler.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PageScrollStateChangedHandler.java index 4693488320..dc1af54a89 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PageScrollStateChangedHandler.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PageScrollStateChangedHandler.java @@ -48,7 +48,7 @@ public void validate(Element element, ElementValidation validation) { super.validate(element, validation); validatorHelper.param.anyOrder() // - .type(CanonicalNameConstants.VIEW_PAGER).optional() // + .anyOfTypes(CanonicalNameConstants.VIEW_PAGER, CanonicalNameConstants.ANDROIDX_VIEW_PAGER).optional() // .primitiveOrWrapper(TypeKind.INT).optional() // .validate((ExecutableElement) element, validation); } @@ -71,8 +71,7 @@ public void process(Element element, EComponentWithViewSupportHolder holder) { if (parameterType.getKind() == TypeKind.INT || CanonicalNameConstants.INTEGER.equals(parameterType.toString())) { stateParameterPosition = i; } else { - TypeMirror viewPagerType = annotationHelper.typeElementFromQualifiedName(CanonicalNameConstants.VIEW_PAGER).asType(); - if (annotationHelper.isSubtype(parameterType, viewPagerType)) { + if (isViewPagerParameter(parameterType)) { viewPagerParameterPosition = i; viewPagerParameterType = parameterType; } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PageScrolledHandler.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PageScrolledHandler.java index d001f6c1e4..9311040e97 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PageScrolledHandler.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PageScrolledHandler.java @@ -48,7 +48,7 @@ protected void validate(Element element, ElementValidation validation) { super.validate(element, validation); validatorHelper.param.inOrder() // - .type(CanonicalNameConstants.VIEW_PAGER).optional() // + .anyOfTypes(CanonicalNameConstants.VIEW_PAGER, CanonicalNameConstants.ANDROIDX_VIEW_PAGER).optional() // .primitiveOrWrapper(TypeKind.INT).optional() // .primitiveOrWrapper(TypeKind.FLOAT).optional() // .primitiveOrWrapper(TypeKind.INT).optional() // @@ -83,8 +83,7 @@ public void process(Element element, EComponentWithViewSupportHolder holder) thr } else if (parameterType.getKind() == TypeKind.FLOAT || CanonicalNameConstants.FLOAT.equals(parameterType.toString())) { positionOffsetParameterPosition = i; } else { - TypeMirror viewPagerType = annotationHelper.typeElementFromQualifiedName(CanonicalNameConstants.VIEW_PAGER).asType(); - if (annotationHelper.isSubtype(parameterType, viewPagerType)) { + if (isViewPagerParameter(parameterType)) { viewPagerParameterPosition = i; viewPagerParameterType = parameterType; } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PageSelectedHandler.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PageSelectedHandler.java index 4c583b4376..959f12ef08 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PageSelectedHandler.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PageSelectedHandler.java @@ -47,7 +47,7 @@ protected void validate(Element element, ElementValidation validation) { super.validate(element, validation); validatorHelper.param.anyOrder() // - .type(CanonicalNameConstants.VIEW_PAGER).optional() // + .anyOfTypes(CanonicalNameConstants.VIEW_PAGER, CanonicalNameConstants.ANDROIDX_VIEW_PAGER).optional() // .primitiveOrWrapper(TypeKind.INT).optional() // .validate((ExecutableElement) element, validation); } @@ -70,8 +70,7 @@ public void process(Element element, EComponentWithViewSupportHolder holder) thr if (parameterType.getKind() == TypeKind.INT || CanonicalNameConstants.INTEGER.equals(parameterType.toString())) { positionParameterPosition = i; } else { - TypeMirror viewPagerType = annotationHelper.typeElementFromQualifiedName(CanonicalNameConstants.VIEW_PAGER).asType(); - if (annotationHelper.isSubtype(parameterType, viewPagerType)) { + if (isViewPagerParameter(parameterType)) { viewPagerParameterPosition = i; viewPagerParameterType = parameterType; } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PreferenceChangeHandler.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PreferenceChangeHandler.java index 2363147966..aa1513db5f 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PreferenceChangeHandler.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PreferenceChangeHandler.java @@ -55,7 +55,7 @@ public void validate(Element element, ElementValidation valid) { validatorHelper.returnTypeIsVoidOrBoolean(executableElement, valid); validatorHelper.param.anyOrder() // - .extendsAnyOfTypes(CanonicalNameConstants.PREFERENCE, CanonicalNameConstants.SUPPORT_V7_PREFERENCE).optional() // + .extendsAnyOfTypes(CanonicalNameConstants.PREFERENCE, CanonicalNameConstants.SUPPORT_V7_PREFERENCE, CanonicalNameConstants.ANDROIDX_PREFERENCE).optional() // .anyOfTypes(CanonicalNameConstants.OBJECT, CanonicalNameConstants.STRING_SET, CanonicalNameConstants.STRING, // CanonicalNameConstants.BOOLEAN, boolean.class.getName(), // CanonicalNameConstants.INTEGER, int.class.getName(), // @@ -78,15 +78,17 @@ protected void makeCall(JBlock listenerMethodBody, JInvocation call, TypeMirror @Override protected void processParameters(HasPreferences holder, JMethod listenerMethod, JInvocation call, List userParameters) { JVar preferenceParam = listenerMethod.param(holder.getBasePreferenceClass(), "preference"); - + JVar newValueParam = listenerMethod.param(getClasses().OBJECT, "newValue"); for (VariableElement variableElement : userParameters) { String type = variableElement.asType().toString(); if (isTypeOrSubclass(CanonicalNameConstants.PREFERENCE, variableElement)) { call.arg(castArgumentIfNecessary(holder, CanonicalNameConstants.PREFERENCE, preferenceParam, variableElement)); - } else if (isTypeOrSubclass(CanonicalNameConstants.SUPPORT_V7_PREFERENCE, variableElement)) { + } else if (isTypeOrSubclass(CanonicalNameConstants.SUPPORT_V7_PREFERENCE, variableElement)) { call.arg(castArgumentIfNecessary(holder, CanonicalNameConstants.SUPPORT_V7_PREFERENCE, preferenceParam, variableElement)); + } else if (isTypeOrSubclass(CanonicalNameConstants.ANDROIDX_PREFERENCE, variableElement)) { + call.arg(castArgumentIfNecessary(holder, CanonicalNameConstants.ANDROIDX_PREFERENCE, preferenceParam, variableElement)); } else if (type.equals(CanonicalNameConstants.OBJECT)) { call.arg(newValueParam); } else if (type.equals(CanonicalNameConstants.INTEGER) || type.equals(int.class.getName()) || // @@ -117,6 +119,7 @@ protected String getSetterName() { @Override protected AbstractJClass getListenerClass(HasPreferences holder) { - return holder.usingSupportV7Preference() ? getClasses().SUPPORT_V7_PREFERENCE_CHANGE_LISTENER : getClasses().PREFERENCE_CHANGE_LISTENER; + return holder.usingSupportV7Preference() ? getClasses().SUPPORT_V7_PREFERENCE_CHANGE_LISTENER + : holder.usingAndroidxPreference() ? getClasses().ANDROIDX_PREFERENCE_CHANGE_LISTENER : getClasses().PREFERENCE_CHANGE_LISTENER; } } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PreferenceClickHandler.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PreferenceClickHandler.java index 8a017df2d2..9e3538639b 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PreferenceClickHandler.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PreferenceClickHandler.java @@ -54,7 +54,7 @@ public void validate(Element element, ElementValidation valid) { validatorHelper.returnTypeIsVoidOrBoolean(executableElement, valid); validatorHelper.param // - .extendsAnyOfTypes(CanonicalNameConstants.PREFERENCE, CanonicalNameConstants.SUPPORT_V7_PREFERENCE).optional() // + .extendsAnyOfTypes(CanonicalNameConstants.PREFERENCE, CanonicalNameConstants.SUPPORT_V7_PREFERENCE, CanonicalNameConstants.ANDROIDX_PREFERENCE).optional() // .validate(executableElement, valid); } @@ -92,7 +92,8 @@ protected String getSetterName() { @Override protected AbstractJClass getListenerClass(HasPreferences holder) { - return holder.usingSupportV7Preference() ? getClasses().SUPPORT_V7_PREFERENCE_CLICK_LISTENER : getClasses().PREFERENCE_CLICK_LISTENER; + return holder.usingSupportV7Preference() ? getClasses().SUPPORT_V7_PREFERENCE_CLICK_LISTENER + : holder.usingAndroidxPreference() ? getClasses().ANDROIDX_PREFERENCE_CLICK_LISTENER : getClasses().PREFERENCE_CLICK_LISTENER; } } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/ReceiverHandler.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/ReceiverHandler.java index ba491931ab..fc997e6adf 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/ReceiverHandler.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/ReceiverHandler.java @@ -173,7 +173,11 @@ private void registerAndUnregisterReceiver(HasReceiverRegistration holder, Recei IJExpression broadcastManager; if (local) { - broadcastManager = getClasses().LOCAL_BROADCAST_MANAGER.staticInvoke("getInstance").arg(holder.getContextRef()); + if (getProcessingEnvironment().getElementUtils().getTypeElement(CanonicalNameConstants.LOCAL_BROADCAST_MANAGER) == null) { + broadcastManager = getClasses().ANDROIDX_LOCAL_BROADCAST_MANAGER.staticInvoke("getInstance").arg(holder.getContextRef()); + } else { + broadcastManager = getClasses().LOCAL_BROADCAST_MANAGER.staticInvoke("getInstance").arg(holder.getContextRef()); + } } else { broadcastManager = holder.getContextRef(); } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/WindowFeatureHandler.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/WindowFeatureHandler.java index 94972b87e7..d71fb12929 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/WindowFeatureHandler.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/WindowFeatureHandler.java @@ -44,11 +44,13 @@ public void process(Element element, EActivityHolder holder) throws Exception { int[] features = annotation.value(); TypeElement appCompatActivity = annotationHelper.typeElementFromQualifiedName(CanonicalNameConstants.APPCOMPAT_ACTIVITY); + TypeElement androidxAppCompatActivity = annotationHelper.typeElementFromQualifiedName(CanonicalNameConstants.ANDROIDX_APPCOMPAT_ACTIVITY); TypeElement actionBarActivity = annotationHelper.typeElementFromQualifiedName(CanonicalNameConstants.ACTIONBAR_ACTIVITY); TypeElement type = (TypeElement) element; String methodName; - if ((appCompatActivity != null && annotationHelper.isSubtype(type, appCompatActivity)) || (actionBarActivity != null && annotationHelper.isSubtype(type, actionBarActivity))) { + if ((appCompatActivity != null && annotationHelper.isSubtype(type, appCompatActivity)) || (androidxAppCompatActivity != null && annotationHelper.isSubtype(type, androidxAppCompatActivity)) + || (actionBarActivity != null && annotationHelper.isSubtype(type, actionBarActivity))) { methodName = "supportRequestWindowFeature"; } else { methodName = "requestWindowFeature"; diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/helper/ActivityIntentBuilder.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/helper/ActivityIntentBuilder.java index a0769c1920..1d4cfa7664 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/helper/ActivityIntentBuilder.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/helper/ActivityIntentBuilder.java @@ -86,6 +86,12 @@ private void createAdditionalIntentMethods() { JVar fragmentParam = method.param(getClasses().SUPPORT_V4_FRAGMENT, "supportFragment"); method.body()._return(_new(holder.getIntentBuilderClass()).arg(fragmentParam)); } + if (hasAndroidxFragmentInClasspath()) { + // intent() with androidx.fragment.app.Fragment param + JMethod method = holder.getGeneratedClass().method(STATIC | PUBLIC, holder.getIntentBuilderClass(), "intent"); + JVar fragmentParam = method.param(getClasses().ANDROIDX_FRAGMENT, "supportFragment"); + method.body()._return(_new(holder.getIntentBuilderClass()).arg(fragmentParam)); + } } @Override @@ -101,6 +107,9 @@ private void createAdditionalConstructor() { if (hasFragmentSupportInClasspath()) { fragmentSupportField = addFragmentConstructor(getClasses().SUPPORT_V4_FRAGMENT, "fragmentSupport" + generationSuffix()); } + if (hasAndroidxFragmentInClasspath()) { + fragmentSupportField = addFragmentConstructor(getClasses().ANDROIDX_FRAGMENT, "fragmentSupport" + generationSuffix()); + } } private JFieldVar addFragmentConstructor(AbstractJClass fragmentClass, String fieldName) { @@ -163,8 +172,9 @@ private void overrideStartForResultMethod() { JBlock thenBlock = activityCondition._then(); JVar activityVar = thenBlock.decl(getClasses().ACTIVITY, "activity", JExpr.cast(getClasses().ACTIVITY, contextField)); - if (hasActivityCompatInClasspath() && hasActivityOptionsInActivityCompat()) { - thenBlock.staticInvoke(getClasses().ACTIVITY_COMPAT, "startActivityForResult") // + AbstractJClass activityCompat = getActivityCompat(); + if (activityCompat != null) { + thenBlock.staticInvoke(activityCompat, "startActivityForResult") // .arg(activityVar).arg(intentField).arg(requestCode).arg(optionsField); } else if (hasActivityOptionsInFragment()) { JBlock startForResultInvocationBlock; @@ -175,7 +185,7 @@ private void overrideStartForResultMethod() { } startForResultInvocationBlock.invoke(activityVar, "startActivityForResult") // - .arg(intentField).arg(requestCode).arg(optionsField); + .arg(intentField).arg(requestCode).arg(optionsField); } else { thenBlock.invoke(activityVar, "startActivityForResult").arg(intentField).arg(requestCode); } @@ -216,8 +226,8 @@ protected boolean hasFragmentSupportInClasspath() { return elementUtils.getTypeElement(CanonicalNameConstants.SUPPORT_V4_FRAGMENT) != null; } - protected boolean hasActivityCompatInClasspath() { - return elementUtils.getTypeElement(CanonicalNameConstants.ACTIVITY_COMPAT) != null; + protected boolean hasAndroidxFragmentInClasspath() { + return elementUtils.getTypeElement(CanonicalNameConstants.ANDROIDX_FRAGMENT) != null; } protected boolean hasActivityOptionsInFragment() { @@ -230,10 +240,18 @@ protected boolean hasActivityOptionsInFragment() { return hasActivityOptions(fragment, 1); } - protected boolean hasActivityOptionsInActivityCompat() { + private AbstractJClass getActivityCompat() { TypeElement activityCompat = elementUtils.getTypeElement(CanonicalNameConstants.ACTIVITY_COMPAT); + if (hasActivityOptions(activityCompat, 2)) { + return getClasses().ACTIVITY_COMPAT; + } + + TypeElement androidxActivityCompat = elementUtils.getTypeElement(CanonicalNameConstants.ANDROIDX_ACTIVITY_COMPAT); + if (hasActivityOptions(androidxActivityCompat, 2)) { + return getClasses().ANDROIDX_ACTIVITY_COMPAT; + } - return hasActivityOptions(activityCompat, 2); + return null; } private boolean hasActivityOptions(TypeElement type, int optionsParamPosition) { diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/helper/CoreValidatorHelper.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/helper/CoreValidatorHelper.java index ed42705c29..4cd2bddc5e 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/helper/CoreValidatorHelper.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/helper/CoreValidatorHelper.java @@ -222,7 +222,7 @@ public boolean correctReturnType(TypeMirror returnType) { } private void checkDefaultAnnotation(ExecutableElement method, Class annotationClass, String expectedReturnType, DefaultAnnotationCondition condition, - ElementValidation valid) { + ElementValidation valid) { T defaultAnnotation = method.getAnnotation(annotationClass); if (defaultAnnotation != null) { if (!condition.correctReturnType(method.getReturnType())) { @@ -399,8 +399,9 @@ public void hasSupportV4JarIfLocal(Element element, ElementValidation valid) { boolean local = element.getAnnotation(Receiver.class).local(); if (local) { Elements elementUtils = annotationHelper.getElementUtils(); - if (elementUtils.getTypeElement(CanonicalNameConstants.LOCAL_BROADCAST_MANAGER) == null) { - valid.addError("To use the LocalBroadcastManager, you MUST include the android-support-v4 jar"); + if (elementUtils.getTypeElement(CanonicalNameConstants.LOCAL_BROADCAST_MANAGER) == null + && elementUtils.getTypeElement(CanonicalNameConstants.ANDROIDX_LOCAL_BROADCAST_MANAGER) == null) { + valid.addError("To use the LocalBroadcastManager, you MUST include the android-support-v4 or androidx.localbroadcastmanager jar"); } } } @@ -427,6 +428,7 @@ public void childFragmentUsedOnlyIfEnclosingClassIsFragment(Element element, Ele if (childFragment) { TypeElement fragment = annotationHelper.getElementUtils().getTypeElement(CanonicalNameConstants.FRAGMENT); TypeElement supportFragment = annotationHelper.getElementUtils().getTypeElement(CanonicalNameConstants.SUPPORT_V4_FRAGMENT); + TypeElement androidxFragment = annotationHelper.getElementUtils().getTypeElement(CanonicalNameConstants.ANDROIDX_FRAGMENT); boolean enclosingElementIsFragment = false; @@ -436,11 +438,13 @@ public void childFragmentUsedOnlyIfEnclosingClassIsFragment(Element element, Ele enclosingElementIsFragment = true; } else if (supportFragment != null && annotationHelper.isSubtype(enclosingElement, supportFragment)) { enclosingElementIsFragment = true; + } else if (androidxFragment != null && annotationHelper.isSubtype(enclosingElement, androidxFragment)) { + enclosingElementIsFragment = true; } if (!enclosingElementIsFragment) { validation.addError(element, "The 'childFragmentManager' parameter only can be used if the class containing the annotated field is either subclass of " - + CanonicalNameConstants.FRAGMENT + " or " + CanonicalNameConstants.SUPPORT_V4_FRAGMENT); + + CanonicalNameConstants.FRAGMENT + ", " + CanonicalNameConstants.SUPPORT_V4_FRAGMENT + " or " + CanonicalNameConstants.ANDROIDX_FRAGMENT); } } } @@ -453,15 +457,21 @@ public void getChildFragmentManagerMethodIsAvailable(Element element, ElementVal TypeElement fragment = annotationHelper.getElementUtils().getTypeElement(CanonicalNameConstants.FRAGMENT); TypeElement supportFragment = annotationHelper.getElementUtils().getTypeElement(CanonicalNameConstants.SUPPORT_V4_FRAGMENT); + TypeElement androidxFragment = annotationHelper.getElementUtils().getTypeElement(CanonicalNameConstants.ANDROIDX_FRAGMENT); if (supportFragment != null && annotationHelper.isSubtype(enclosingElement, supportFragment)) { if (!methodIsAvailableIn(supportFragment, "getChildFragmentManager")) { validation.addError(element, "The 'childFragmentManager' parameter only can be used if the getChildFragmentManager() method is available in " + CanonicalNameConstants.SUPPORT_V4_FRAGMENT + ", update your support library version."); } + } else if (androidxFragment != null && annotationHelper.isSubtype(enclosingElement, androidxFragment)) { + if (!methodIsAvailableIn(androidxFragment, "getChildFragmentManager")) { + validation.addError(element, "The 'childFragmentManager' parameter only can be used if the getChildFragmentManager() method is available in " + + CanonicalNameConstants.ANDROIDX_FRAGMENT + ", update your support library version."); + } } else if (fragment != null && annotationHelper.isSubtype(enclosingElement, fragment) && environment().getAndroidManifest().getMinSdkVersion() < 17) { - validation.addError(element, "The 'childFragmentManager' parameter only can be used if the getChildFragmentManager() method is available in " - + CanonicalNameConstants.FRAGMENT + " (from API 17). Increment 'minSdkVersion' or use " + CanonicalNameConstants.SUPPORT_V4_FRAGMENT + "."); + validation.addError(element, "The 'childFragmentManager' parameter only can be used if the getChildFragmentManager() method is available in " + CanonicalNameConstants.FRAGMENT + + " (from API 17). Increment 'minSdkVersion' or use " + CanonicalNameConstants.SUPPORT_V4_FRAGMENT + " or " + CanonicalNameConstants.ANDROIDX_FRAGMENT + "."); } } @@ -477,13 +487,13 @@ private boolean methodIsAvailableIn(TypeElement element, String methodName) { } public void checkDataBoundAnnotation(Element element, ElementValidation validation) { - if (element.getAnnotation(DataBound.class) != null && !isClassPresent(CanonicalNameConstants.DATA_BINDING_UTIL)) { + if (element.getAnnotation(DataBound.class) != null && !isClassPresent(CanonicalNameConstants.DATA_BINDING_UTIL) && !isClassPresent(CanonicalNameConstants.ANDROIDX_DATA_BINDING_UTIL)) { validation.invalidate(); } } public void hasDataBindingOnClasspath(ElementValidation validation) { - if (!isClassPresent(CanonicalNameConstants.DATA_BINDING_UTIL)) { + if (!isClassPresent(CanonicalNameConstants.DATA_BINDING_UTIL) && !isClassPresent(CanonicalNameConstants.ANDROIDX_DATA_BINDING_UTIL)) { validation.addError("Data binding is not found on classpath, be sure to enable data binding for the project."); } } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/process/ProcessHolder.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/process/ProcessHolder.java index 066a9828b7..631a0d7e81 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/process/ProcessHolder.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/process/ProcessHolder.java @@ -138,6 +138,22 @@ public class Classes { public final AbstractJClass VIEW_DATA_BINDING = refClass(CanonicalNameConstants.VIEW_DATA_BINDING); public final AbstractJClass DATA_BINDING_UTIL = refClass(CanonicalNameConstants.DATA_BINDING_UTIL); + /* + * Android X + */ + public final AbstractJClass ANDROIDX_ACTIVITY_COMPAT = refClass(CanonicalNameConstants.ANDROIDX_ACTIVITY_COMPAT); + public final AbstractJClass ANDROIDX_FRAGMENT = refClass(CanonicalNameConstants.ANDROIDX_FRAGMENT); + public final AbstractJClass ANDROIDX_FRAGMENT_ACTIVITY = refClass(CanonicalNameConstants.ANDROIDX_FRAGMENT_ACTIVITY); + public final AbstractJClass ANDROIDX_LOCAL_BROADCAST_MANAGER = refClass(CanonicalNameConstants.ANDROIDX_LOCAL_BROADCAST_MANAGER); + public final AbstractJClass ANDROIDX_CONTEXT_COMPAT = refClass(CanonicalNameConstants.ANDROIDX_CONTEXT_COMPAT); + public final AbstractJClass ANDROIDX_PREFERENCE = refClass(CanonicalNameConstants.ANDROIDX_PREFERENCE); + public final AbstractJClass ANDROIDX_PREFERENCE_CLICK_LISTENER = refClass(CanonicalNameConstants.ANDROIDX_PREFERENCE_CLICK_LISTENER); + public final AbstractJClass ANDROIDX_PREFERENCE_CHANGE_LISTENER = refClass(CanonicalNameConstants.ANDROIDX_PREFERENCE_CHANGE_LISTENER); + public final AbstractJClass ANDROIDX_VIEW_PAGER = refClass(CanonicalNameConstants.ANDROIDX_VIEW_PAGER); + public final AbstractJClass ANDROIDX_PAGE_CHANGE_LISTENER = refClass(CanonicalNameConstants.ANDROIDX_PAGE_CHANGE_LISTENER); + public final AbstractJClass ANDROIDX_VIEW_DATA_BINDING = refClass(CanonicalNameConstants.ANDROIDX_VIEW_DATA_BINDING); + public final AbstractJClass ANDROIDX_DATA_BINDING_UTIL = refClass(CanonicalNameConstants.ANDROIDX_DATA_BINDING_UTIL); + /* * HttpClient */