Skip to content

Commit 2caede2

Browse files
author
lemon
committed
加入apt注解处理器注册handle的功能
1 parent c52687c commit 2caede2

File tree

18 files changed

+240
-17
lines changed

18 files changed

+240
-17
lines changed

.idea/caches/build_file_checksums.ser

712 Bytes
Binary file not shown.

.idea/gradle.xml

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,24 @@
11
# FEATURE
22

3+
#### :heavy_check_mark: 使用apt技术注册handler
4+
5+
支持使用apt技术,完成注册handler的功能,步骤如下:
6+
7+
1. 添加下面的依赖
8+
9+
```Gradle
10+
implementation project(':easybridge-annotation')
11+
kapt project(':easybridge-processor') // in kotlin
12+
```
13+
14+
2. 使用注解`@EasyBridgeHandler`
15+
16+
3. 项目编译之后会生成工具类`EBHandlerManager`
17+
18+
4. 在页面初始化webview的时候,调用步骤三得到的`EBHandlerManager`的静态方法`register(webview)`
19+
20+
**目前仅支持构造`BaseBridgeHandler` 的子类实例(具体与之一致的构造方法),后续会对这一点改进,使其适应具备不同构造方法对handler实例**
21+
322
#### :heavy_check_mark: JavaScript调用Java功能
423

524
**支持同步和异步两种方式的调用(目前仅开放异步调用,但实现原理本身支持同步调用)**

app/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ apply plugin: 'kotlin-android'
44

55
apply plugin: 'kotlin-android-extensions'
66

7+
apply plugin: 'kotlin-kapt'
8+
79
android {
810
compileSdkVersion 27
911
defaultConfig {
@@ -31,4 +33,6 @@ dependencies {
3133
androidTestImplementation 'com.android.support.test:runner:1.0.1'
3234
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
3335
implementation project(':easybridge')
36+
implementation project(':easybridge-annotation')
37+
kapt project(':easybridge-processor')
3438
}

app/src/main/java/easily/tech/easybridge/MainActivity.kt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import android.support.v7.app.AppCompatActivity
66
import android.os.Bundle
77
import android.webkit.*
88
import android.widget.Toast
9-
import easily.tech.easybridge.handler.ToastHandler
9+
import easily.tech.easybridge.lib.EBHandlerManager
1010
import easily.tech.easybridge.lib.EasyBridgeWebChromeClient
1111
import easily.tech.easybridge.lib.ResultCallBack
1212
import kotlinx.android.synthetic.main.activity_main.*
@@ -19,6 +19,13 @@ class MainActivity : AppCompatActivity() {
1919
WebView.setWebContentsDebuggingEnabled(true)
2020
}
2121
setContentView(R.layout.activity_main)
22+
init()
23+
webView.loadUrl("file:///android_asset/demo.html")
24+
25+
}
26+
27+
private fun init() {
28+
EBHandlerManager.register(webView)
2229
webView.webViewClient = object : WebViewClient() {
2330
override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
2431
return false
@@ -37,10 +44,6 @@ class MainActivity : AppCompatActivity() {
3744
else -> true
3845
}
3946
}))
40-
41-
webView.registerHandler(ToastHandler(this))
42-
43-
webView.loadUrl("file:///android_asset/demo.html")
4447
// call JavaScript From Java
4548
webView.postDelayed({
4649
webView.callHandler("resultBack", "this is the value pass from Java", object : ResultCallBack() {
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
package easily.tech.easybridge.handler
22

3-
import android.content.Context
4-
import android.util.Log
53
import android.widget.Toast
4+
import easily.tech.easybridge.annotation.EasyBridgeHandler
5+
import easily.tech.easybridge.lib.EasyBridgeWebView
66
import easily.tech.easybridge.lib.ResultCallBack
77
import easily.tech.easybridge.lib.handler.BaseBridgeHandler
88

99
/**
1010
* Created by lemon on 30/03/2018.
1111
*/
12-
class ToastHandler(private val context: Context) : BaseBridgeHandler("toast") {
12+
@EasyBridgeHandler(name = "toast")
13+
class ToastHandler(handlerName:String,webView: EasyBridgeWebView) : BaseBridgeHandler(handlerName,webView) {
1314
override fun onCall(parameters: String?, callBack: ResultCallBack?) {
14-
Log.d("Toast",parameters)
15-
Toast.makeText(context, parameters, Toast.LENGTH_SHORT).show()
15+
Toast.makeText(webView.context, parameters, Toast.LENGTH_SHORT).show()
1616
callBack?.onResult(null)
1717
}
1818
}

easybridge-annotation/.gitignore

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

easybridge-annotation/build.gradle

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
apply plugin: 'java-library'
2+
3+
dependencies {
4+
implementation fileTree(include: ['*.jar'], dir: 'libs')
5+
}
6+
7+
sourceCompatibility = "1.7"
8+
targetCompatibility = "1.7"
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package easily.tech.easybridge.annotation;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Retention;
5+
import java.lang.annotation.RetentionPolicy;
6+
import java.lang.annotation.Target;
7+
8+
@Target(ElementType.TYPE)
9+
@Retention(RetentionPolicy.SOURCE)
10+
public @interface EasyBridgeHandler {
11+
12+
// TODO: 2018/4/4 maybe we should collect the info about the constructor,for building all the instance with different constructor
13+
14+
String name() default "";
15+
}

easybridge-processor/.gitignore

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

0 commit comments

Comments
 (0)