Skip to content

Commit 8704be9

Browse files
Merge pull request #27 from Omega-R/develop
Add ktx, add logs
2 parents a0891eb + 4d1a8db commit 8704be9

File tree

14 files changed

+136
-18
lines changed

14 files changed

+136
-18
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ allprojects {
2424
ext {
2525
targetVersionCode = 46
2626
targetVersionName = "1.5.6"
27-
kotlin_version = '1.3.50'
27+
kotlin_version = '1.3.72'
2828
def autoServiceVersion = '1.0-rc5'
2929
def gradleIncapHelperVersion = '0.3'
3030

moxy-androidx-sample/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ dependencies {
4545
implementation 'androidx.appcompat:appcompat:1.1.0'
4646
implementation project(':moxy')
4747
implementation project(':moxy-androidx')
48+
implementation project(':moxy-ktx')
4849
kapt project(':moxy-compiler')
4950
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
5051
}

moxy-androidx-sample/src/main/kotlin/example/com/moxy_androidx_sample/MainActivity.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
package example.com.moxy_androidx_sample
22

3-
import android.location.Location
43
import android.os.Bundle
54
import android.util.Log
5+
import com.omegar.mvp.ktx.providePresenter
66
import com.omegar.mvp.presenter.InjectPresenter
77
import example.com.moxy_androidx_sample.contract.Contract
8-
import example.com.moxy_androidx_sample.packagee.Item
98

109
class MainActivity : BaseActivity(R.layout.activity_main), Contract.MainView<Double>, SecondInterface {
1110
// override fun fourth(item: String?) {
@@ -32,16 +31,18 @@ class MainActivity : BaseActivity(R.layout.activity_main), Contract.MainView<Dou
3231
// TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
3332
// }
3433

35-
@InjectPresenter
36-
internal lateinit var presenter: MainPresenter
34+
35+
private val presenter: MainPresenter by providePresenter {
36+
MainPresenter()
37+
}
3738

3839
override fun onCreate(savedInstanceState: Bundle?) {
3940
super.onCreate(savedInstanceState)
4041
// setContentView(R.layout.activity_main)
4142
}
4243

4344
override fun printLog(msg: Double?, log: String?) {
44-
Log.e(TAG, "printLog : msg : $msg activity hash code : ${hashCode()}")
45+
Log.e(TAG, "printLog : msg : $msg activity hash code : ${hashCode()}, log: $log")
4546
}
4647

4748
override fun second() {
Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
package example.com.moxy_androidx_sample
22

33
import android.util.Log
4+
import example.com.moxy_androidx_sample.BasePresenter
5+
import example.com.moxy_androidx_sample.MainActivity
46
import example.com.moxy_androidx_sample.contract.Contract
57

68
class MainPresenter : BasePresenter<Contract.MainView<Double>>() {
7-
9+
10+
init {
11+
viewState.printLog(10.0, "Kek")
12+
}
13+
814
override fun onFirstViewAttach() {
915
super.onFirstViewAttach()
1016
Log.e(MainActivity.TAG, "presenter hash code : ${hashCode()}")
11-
viewState.printLog(10.0, "Kek")
17+
viewState.printLog(2.0, viewState.toString())
1218
}
1319

1420
}

moxy-compiler/src/main/java/com/omegar/mvp/compiler/Util.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
*/
1717
package com.omegar.mvp.compiler;
1818

19-
import com.google.common.collect.Iterables;
2019
import com.omegar.mvp.MvpView;
2120
import com.omegar.mvp.viewstate.strategy.StrategyType;
2221
import com.squareup.javapoet.ClassName;
@@ -45,7 +44,6 @@
4544
import javax.lang.model.type.TypeVariable;
4645
import javax.lang.model.type.WildcardType;
4746
import javax.lang.model.util.Elements;
48-
import javax.lang.model.util.Types;
4947

5048
/**
5149
* Utilities for handling types in annotation processors

moxy-compiler/src/main/java/com/omegar/mvp/compiler/pipeline/JavaFileWriter.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,7 @@ private void run(JavaFile file) {
4545
}
4646

4747
public void shutdown() {
48-
List<Runnable> runnables = mAsyncExecutors.shutdownNow();
49-
for (Runnable runnable : runnables) {
50-
runnable.run();
51-
}
48+
mAsyncExecutors.shutdown();
5249

5350
try {
5451
mAsyncExecutors.awaitTermination(2, TimeUnit.MINUTES);

moxy-compiler/src/main/java/com/omegar/mvp/compiler/viewstate/ViewInterfaceInfoToViewStateJavaFileProcessor.java

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,8 @@ private TypeSpec generateCommandClass(ViewMethod method, List<TypeVariableName>
166166
}})
167167
.superclass(VIEW_COMMAND_TYPE_NAME)
168168
.addMethod(generateCommandConstructor(method))
169-
.addMethod(applyMethod);
169+
.addMethod(applyMethod)
170+
.addMethod(generateToStringMethodSpec(method));
170171

171172
for (ParameterSpec parameter : method.getParameterSpecs()) {
172173
classBuilder.addField(parameter.type, parameter.name, Modifier.PRIVATE, Modifier.FINAL);
@@ -221,6 +222,37 @@ private MethodSpec generateCommandConstructor(ViewMethod method) {
221222
return builder.build();
222223
}
223224

225+
private MethodSpec generateToStringMethodSpec(ViewMethod method) {
226+
StringBuilder statement = new StringBuilder("return \"" + method.getName());
227+
228+
boolean firstParams = true;
229+
for (ParameterSpec parameter : method.getParameterSpecs()) {
230+
if (firstParams) {
231+
firstParams = false;
232+
statement.append("{\" + \n\"");
233+
} else {
234+
statement.append(" + \n\", ");
235+
}
236+
237+
statement.append(parameter.name)
238+
.append("=\" + ")
239+
.append(parameter.name)
240+
.append(" ");
241+
}
242+
if (!firstParams) {
243+
statement.append("+\n'}'");
244+
} else {
245+
statement.append("\"");
246+
}
247+
248+
return MethodSpec.methodBuilder("toString")
249+
.addAnnotation(Override.class)
250+
.addModifiers(Modifier.PUBLIC)
251+
.returns(String.class)
252+
.addStatement(statement.toString())
253+
.build();
254+
}
255+
224256
@Override
225257
protected void finish(PipelineContext<JavaFile> nextContext) {
226258
mReflectorPackagesPublisher.finish();

moxy-ktx/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/build

moxy-ktx/build.gradle

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
buildscript {
2+
repositories {
3+
google()
4+
jcenter()
5+
mavenCentral()
6+
}
7+
dependencies {
8+
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
9+
}
10+
}
11+
12+
13+
apply plugin: 'java-library'
14+
apply plugin: 'kotlin'
15+
apply plugin: 'com.github.dcendents.android-maven'
16+
group = 'com.github.Omega-R.OmegaMoxy'
17+
18+
java {
19+
sourceCompatibility = JavaVersion.VERSION_1_7
20+
targetCompatibility = JavaVersion.VERSION_1_7
21+
}
22+
23+
dependencies {
24+
api(project(":moxy"))
25+
26+
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
27+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.omegar.mvp.ktx
2+
3+
import com.omegar.mvp.MvpDelegateHolder
4+
import com.omegar.mvp.MvpPresenter
5+
import com.omegar.mvp.presenter.PresenterField
6+
import com.omegar.mvp.presenter.PresenterType
7+
import kotlin.reflect.KProperty
8+
9+
/**
10+
* Created by Anton Knyazev on 25.11.2020.
11+
*/
12+
13+
class CustomPresenterFactory<P : MvpPresenter<*>>(tag: String, clz: Class<out MvpPresenter<*>>, private val factoryBlock: () -> P) :
14+
PresenterField<Any?>(tag, PresenterType.LOCAL, null, clz) {
15+
16+
private var presenter: P? = null
17+
18+
override fun bind(container: Any?, presenter: MvpPresenter<*>?) {
19+
@Suppress("UNCHECKED_CAST")
20+
this.presenter = presenter as P
21+
}
22+
23+
override fun providePresenter(delegated: Any?): MvpPresenter<*> {
24+
return factoryBlock()
25+
}
26+
27+
operator fun getValue(thisRef: Any?, property: KProperty<*>): P {
28+
return presenter!!
29+
}
30+
31+
}
32+
33+
inline fun <reified P : MvpPresenter<*>> MvpDelegateHolder.providePresenter(
34+
name: String = "presenter",
35+
noinline factoryBlock: () -> P = { P::class.java.newInstance() }
36+
): CustomPresenterFactory<P> {
37+
return CustomPresenterFactory(P::class.java.name + "." + name, P::class.java, factoryBlock).also {
38+
mvpDelegate.addCustomPresenterFields(it)
39+
}
40+
}

0 commit comments

Comments
 (0)