Skip to content

Commit e9489f6

Browse files
committed
Fix #16, disable getSupportLoaderManager() for android.app.Activity
1 parent 7c19c3b commit e9489f6

20 files changed

Lines changed: 200 additions & 39 deletions

File tree

easymvp-compiler/src/main/java/easymvp/compiler/EasyMVPProcessor.java

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@
6262
public class EasyMVPProcessor extends AbstractProcessor {
6363

6464
private static final String ANDROID_ACTIVITY_CLASS_NAME = "android.app.Activity";
65+
private static final String ANDROID_SUPPORT_ACTIVITY_CLASS_NAME =
66+
"android.support.v7.app.AppCompatActivity";
6567
private static final String ANDROID_FRAGMENT_CLASS_NAME = "android.app.Fragment";
6668
private static final String ANDROID_SUPPORT_FRAGMENT_CLASS_NAME =
6769
"android.support.v4.app.Fragment";
@@ -75,7 +77,9 @@ public class EasyMVPProcessor extends AbstractProcessor {
7577

7678
/** A flag that allow processor to generate presenter loaders only once to avoid IO exception */
7779
private boolean isLoadersCopied = false;
78-
80+
private boolean isSupportLoadersCopied = false;
81+
private boolean needLoader = false;
82+
private boolean needSupportLoader = false;
7983
@Override
8084
public synchronized void init(ProcessingEnvironment processingEnv) {
8185
super.init(processingEnv);
@@ -106,15 +110,18 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
106110
}
107111

108112
private void generatePresenterLoaders() {
109-
if (!isLoadersCopied) {
110-
PresenterLoaderGenerator supportLibraryPresenterLoader =
111-
new PresenterLoaderGenerator(true);
113+
if (!isLoadersCopied && needLoader) {
112114
PresenterLoaderGenerator
113115
androidPresenterLoader = new PresenterLoaderGenerator(false);
114-
write(supportLibraryPresenterLoader);
115116
write(androidPresenterLoader);
116117
isLoadersCopied = true;
117118
}
119+
if (!isSupportLoadersCopied && needSupportLoader) {
120+
PresenterLoaderGenerator supportLibraryPresenterLoader =
121+
new PresenterLoaderGenerator(true);
122+
write(supportLibraryPresenterLoader);
123+
isSupportLoadersCopied = true;
124+
}
118125
}
119126

120127
private void write(ClassGenerator classGenerator) {
@@ -158,18 +165,27 @@ private void parseActivityView(Element element,
158165
error("%s is abstract", element.getSimpleName());
159166
return;
160167
}
161-
if (!Validator.isSubType(element, ANDROID_ACTIVITY_CLASS_NAME, processingEnv)) {
162-
error("%s must extend Activity", element.getSimpleName());
168+
boolean isActivity =
169+
Validator.isSubType(element, ANDROID_ACTIVITY_CLASS_NAME, processingEnv);
170+
boolean isSupportActivity =
171+
Validator.isSubType(element, ANDROID_SUPPORT_ACTIVITY_CLASS_NAME, processingEnv);
172+
if (!isActivity && !isSupportActivity) {
173+
error("%s must extend Activity or AppCompatActivity", element.getSimpleName());
163174
return;
164175
}
165-
166176
//getEnclosing for class type will returns its package/
167177
TypeElement enclosingElement = (TypeElement) element;
168178
DelegateClassGenerator delegateClassGenerator =
169179
getDelegate(enclosingElement, delegateClassMap);
170180
ActivityView annotation = element.getAnnotation(ActivityView.class);
171181
delegateClassGenerator.setResourceID(annotation.layout());
172-
delegateClassGenerator.setViewType(ViewType.ACTIVITY);
182+
if (isSupportActivity) {
183+
needSupportLoader = true;
184+
delegateClassGenerator.setViewType(ViewType.SUPPORT_ACTIVITY);
185+
} else {
186+
needLoader = true;
187+
delegateClassGenerator.setViewType(ViewType.ACTIVITY);
188+
}
173189
try {
174190
annotation.presenter();
175191
} catch (MirroredTypeException mte) {
@@ -201,8 +217,10 @@ private void parseFragmentView(Element element,
201217
DelegateClassGenerator delegateClassGenerator =
202218
getDelegate(enclosingElement, delegateClassMap);
203219
if (isFragment) {
220+
needLoader = true;
204221
delegateClassGenerator.setViewType(ViewType.FRAGMENT);
205222
} else {
223+
needSupportLoader = true;
206224
delegateClassGenerator.setViewType(ViewType.SUPPORT_FRAGMENT);
207225
}
208226
FragmentView annotation = element.getAnnotation(FragmentView.class);

easymvp-compiler/src/main/java/easymvp/compiler/ViewType.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
public enum ViewType {
77

88
ACTIVITY,
9+
SUPPORT_ACTIVITY,
910
FRAGMENT,
1011
SUPPORT_FRAGMENT,
1112
CUSTOM_VIEW

easymvp-compiler/src/main/java/easymvp/compiler/generator/AndroidLoaderUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ static ClassName getPresenterLoader(boolean supportLibrary) {
6666
private static ClassName get(ViewType viewType, ClassName supportVersion,
6767
ClassName defaultVersion) {
6868
switch (viewType) {
69-
case ACTIVITY:
69+
case SUPPORT_ACTIVITY:
7070
case SUPPORT_FRAGMENT:
7171
return supportVersion;
7272
case FRAGMENT:

easymvp-compiler/src/main/java/easymvp/compiler/generator/DelegateClassGenerator.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import easymvp.compiler.generator.decorator.BaseDecorator;
3232
import easymvp.compiler.generator.decorator.CustomViewDecorator;
3333
import easymvp.compiler.generator.decorator.FragmentDecorator;
34+
import easymvp.compiler.generator.decorator.SupportActivityDecorator;
3435
import easymvp.compiler.generator.decorator.SupportFragmentDecorator;
3536

3637
import static easymvp.compiler.util.ClassNames.PROVIDER;
@@ -76,6 +77,9 @@ public void setViewType(ViewType viewType) {
7677
case ACTIVITY:
7778
decorator = new ActivityDecorator(this);
7879
break;
80+
case SUPPORT_ACTIVITY:
81+
decorator = new SupportActivityDecorator(this);
82+
break;
7983
case FRAGMENT:
8084
decorator = new FragmentDecorator(this);
8185
break;

easymvp-compiler/src/main/java/easymvp/compiler/generator/decorator/ActivityDecorator.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@
66

77
import easymvp.compiler.generator.DelegateClassGenerator;
88

9-
import static easymvp.compiler.generator.AndroidLoaderUtils.getSupportLoader;
10-
import static easymvp.compiler.generator.AndroidLoaderUtils.getSupportLoaderCallbacks;
11-
import static easymvp.compiler.generator.AndroidLoaderUtils.getSupportLoaderManager;
12-
import static easymvp.compiler.generator.AndroidLoaderUtils.getSupportPresenterLoader;
9+
import static easymvp.compiler.generator.AndroidLoaderUtils.getLoader;
10+
import static easymvp.compiler.generator.AndroidLoaderUtils.getLoaderCallbacks;
11+
import static easymvp.compiler.generator.AndroidLoaderUtils.getLoaderManager;
12+
import static easymvp.compiler.generator.AndroidLoaderUtils.getPresenterLoader;
1313

1414
/**
1515
* @author Saeed Masoumi (saeed@6thsolution.com)
1616
*/
17+
1718
public class ActivityDecorator extends BaseDecorator {
1819

1920
public ActivityDecorator(DelegateClassGenerator delegateClassGenerator) {
@@ -22,8 +23,8 @@ public ActivityDecorator(DelegateClassGenerator delegateClassGenerator) {
2223

2324
@Override
2425
public MethodSpec getLoaderManagerMethod(MethodSpec.Builder methodSignature) {
25-
return methodSignature.addStatement("return view.getSupportLoaderManager()")
26-
.returns(getSupportLoaderManager())
26+
return methodSignature.addStatement("return view.getLoaderManager()")
27+
.returns(getLoaderManager())
2728
.build();
2829
}
2930

@@ -46,16 +47,16 @@ protected void implementInitializer(MethodSpec.Builder method) {
4647

4748
@Override
4849
protected ClassName getPresenterLoaderClass() {
49-
return getSupportPresenterLoader();
50+
return getPresenterLoader();
5051
}
5152

5253
@Override
5354
protected ClassName getLoaderCallbacksClass() {
54-
return getSupportLoaderCallbacks();
55+
return getLoaderCallbacks();
5556
}
5657

5758
@Override
5859
protected ClassName getLoaderClass() {
59-
return getSupportLoader();
60+
return getLoader();
6061
}
6162
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package easymvp.compiler.generator.decorator;
2+
3+
import com.squareup.javapoet.ClassName;
4+
import com.squareup.javapoet.MethodSpec;
5+
6+
import easymvp.compiler.generator.DelegateClassGenerator;
7+
8+
import static easymvp.compiler.generator.AndroidLoaderUtils.getSupportLoader;
9+
import static easymvp.compiler.generator.AndroidLoaderUtils.getSupportLoaderCallbacks;
10+
import static easymvp.compiler.generator.AndroidLoaderUtils.getSupportLoaderManager;
11+
import static easymvp.compiler.generator.AndroidLoaderUtils.getSupportPresenterLoader;
12+
13+
/**
14+
* @author Saeed Masoumi (saeed@6thsolution.com)
15+
*/
16+
public class SupportActivityDecorator extends ActivityDecorator {
17+
18+
public SupportActivityDecorator(DelegateClassGenerator delegateClassGenerator) {
19+
super(delegateClassGenerator);
20+
}
21+
22+
@Override
23+
public MethodSpec getLoaderManagerMethod(MethodSpec.Builder methodSignature) {
24+
return methodSignature.addStatement("return view.getSupportLoaderManager()")
25+
.returns(getSupportLoaderManager())
26+
.build();
27+
}
28+
29+
@Override
30+
protected ClassName getPresenterLoaderClass() {
31+
return getSupportPresenterLoader();
32+
}
33+
34+
@Override
35+
protected ClassName getLoaderCallbacksClass() {
36+
return getSupportLoaderCallbacks();
37+
}
38+
39+
@Override
40+
protected ClassName getLoaderClass() {
41+
return getSupportLoader();
42+
}
43+
}

easymvp-test/build.gradle

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,15 @@ android {
1919
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
2020
}
2121
}
22-
configurations.all {
23-
resolutionStrategy.force 'com.google.code.findbugs:jsr305:2.0.1'
24-
}
22+
2523
packagingOptions {
2624
exclude 'META-INF/LICENSE'
2725
}
26+
27+
lintOptions {
28+
abortOnError false
29+
}
30+
2831
}
2932

3033
dependencies {

easymvp-test/src/androidTest/java/com/sixthsolution/easymvp/test/ActivityViewTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
/**
1717
* @author Saeed Masoumi (saeed@6thsolution.com)
1818
*/
19+
1920
@MediumTest
2021
@RunWith(AndroidJUnit4.class)
2122
public class ActivityViewTest {
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.sixthsolution.easymvp.test;
2+
3+
import android.support.test.filters.MediumTest;
4+
import android.support.test.rule.ActivityTestRule;
5+
import android.support.test.runner.AndroidJUnit4;
6+
7+
import org.junit.Rule;
8+
import org.junit.Test;
9+
import org.junit.runner.RunWith;
10+
11+
import static android.support.test.espresso.Espresso.onView;
12+
import static android.support.test.espresso.assertion.ViewAssertions.matches;
13+
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
14+
import static android.support.test.espresso.matcher.ViewMatchers.withId;
15+
16+
/**
17+
* @author Saeed Masoumi (saeed@6thsolution.com)
18+
*/
19+
@MediumTest
20+
@RunWith(AndroidJUnit4.class)
21+
public class AppCompatActivityViewTest {
22+
23+
@Rule
24+
public ActivityTestRule<SimpleAppCompatActivity> activityRule = new ActivityTestRule<>(
25+
SimpleAppCompatActivity.class);
26+
27+
@Test
28+
public void layout_already_inflated_with_ActivityView_annotation() {
29+
onView(withId(R.id.base_layout)).check(matches(isDisplayed()));
30+
}
31+
32+
}

easymvp-test/src/androidTest/java/com/sixthsolution/easymvp/test/CustomViewTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
public class CustomViewTest {
1414

1515
@Rule
16-
public ActivityTestRule<SimpleActivityWithCustomView> activityRule = new ActivityTestRule<>(
17-
SimpleActivityWithCustomView.class);
16+
public ActivityTestRule<SimpleAppCompatActivityWithCustomView> activityRule = new ActivityTestRule<>(
17+
SimpleAppCompatActivityWithCustomView.class);
1818

1919
@Test
2020
public void custom_view_already_attached() {

0 commit comments

Comments
 (0)