Skip to content

Commit

Permalink
feat: 优化API
Browse files Browse the repository at this point in the history
  • Loading branch information
wangchenyan committed Sep 25, 2022
1 parent 4e9ee29 commit 48f8d8c
Show file tree
Hide file tree
Showing 11 changed files with 72 additions and 33 deletions.
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
ext.kotlin_version = '1.5.31'
ext.kotlin_version = '1.7.10'
repositories {
google()
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.0.0'
classpath 'com.android.tools.build:gradle:7.1.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.billy.android:autoregister:1.4.2'
}
Expand Down
18 changes: 15 additions & 3 deletions crouter-api/src/main/java/me/wcy/router/Request.kt
Original file line number Diff line number Diff line change
Expand Up @@ -296,16 +296,28 @@ class Request internal constructor(builder: Builder) {
*/
@Deprecated("已过时", replaceWith = ReplaceWith("Kotlin 中使用更加方便的高阶函数"))
fun startForResult(listener: ResultListener) {
val lambdaListener: OnRouteResult = { resultCode, data ->
listener.onActivityResult(resultCode, data)
}
val lambdaListener: OnRouteResultListener = {
listener.onActivityResult(it.resultCode, it.data)
}
startForResult(lambdaListener)
}

/**
* 启动请求,关注请求结果
*/
@Deprecated("已过时", replaceWith = ReplaceWith("[startForResult(OnRouteResultListener)]"))
fun startForResult(listener: OnRouteResult) {
val request = build()
val routerStarter = RouterStarterFactory.create(request.context())
routerStarter.startForResult(request) {
listener(it.resultCode, it.data)
}
}

/**
* 启动请求,关注请求结果
*/
fun startForResult(listener: OnRouteResultListener) {
val request = build()
val routerStarter = RouterStarterFactory.create(request.context())
routerStarter.startForResult(request, listener)
Expand Down
2 changes: 2 additions & 0 deletions crouter-api/src/main/java/me/wcy/router/ResultListener.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,5 @@ interface ResultListener {
}

typealias OnRouteResult = (resultCode: Int, data: Intent?) -> Unit

typealias OnRouteResultListener = (routeResult: RouteResult) -> Unit
6 changes: 3 additions & 3 deletions crouter-api/src/main/java/me/wcy/router/ResultManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import java.util.concurrent.atomic.AtomicInteger
* Activity 结果管理器
*/
internal object ResultManager {
private val resultMap = SparseArray<OnRouteResult>()
private val resultMap = SparseArray<OnRouteResultListener>()
private val requestCode = AtomicInteger(0)

fun genRequestCode(): Int {
Expand All @@ -18,15 +18,15 @@ internal object ResultManager {

fun add(
requestCode: Int,
listener: OnRouteResult
listener: OnRouteResultListener
) {
resultMap.put(requestCode, listener)
}

fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?): Boolean {
val callback = resultMap.get(requestCode)
if (callback != null) {
callback.invoke(resultCode, data)
callback.invoke(RouteResult(resultCode, data))
resultMap.remove(requestCode)
return true
}
Expand Down
26 changes: 26 additions & 0 deletions crouter-api/src/main/java/me/wcy/router/RouteResult.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package me.wcy.router

import android.app.Activity
import android.content.Intent

/**
* Created by wangchenyan.top on 2022/9/25.
*/
data class RouteResult(
val resultCode: Int,
val data: Intent?
) {

fun isSuccess(vararg keys: String): Boolean {
return resultCode == Activity.RESULT_OK && hasExtras(*keys)
}

private fun hasExtras(vararg keys: String): Boolean {
keys.forEach {
if (data?.hasExtra(it) != true) {
return false
}
}
return true
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import android.content.Context
import android.content.Intent
import android.util.Log
import me.wcy.router.CRouter
import me.wcy.router.OnRouteResult
import me.wcy.router.OnRouteResultListener
import me.wcy.router.Request
import me.wcy.router.Response

Expand All @@ -21,7 +21,7 @@ class ContextStarter(private val context: Context) :

override fun startForResult(
request: Request,
listener: OnRouteResult?
listener: OnRouteResultListener?
) {
if (listener != null) {
throw IllegalStateException("start for result should use activity context!")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import android.content.Intent
import android.os.Bundle
import android.util.Log
import me.wcy.router.CRouter
import me.wcy.router.OnRouteResult
import me.wcy.router.OnRouteResultListener
import me.wcy.router.Request
import me.wcy.router.Response
import me.wcy.router.ResultManager
Expand All @@ -33,7 +33,7 @@ class FragmentStarter : Fragment(), RouterStarter {

override fun startForResult(
request: Request,
listener: OnRouteResult?
listener: OnRouteResultListener?
) {
val context = request.context()
val client = CRouter.getRouterClient()
Expand All @@ -51,7 +51,7 @@ class FragmentStarter : Fragment(), RouterStarter {

private fun realStartActivityForResult(
response: Response,
listener: OnRouteResult?
listener: OnRouteResultListener?
) {
val request = response.request()
val context = request.context()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import me.wcy.router.CRouter
import me.wcy.router.OnRouteResult
import me.wcy.router.OnRouteResultListener
import me.wcy.router.Request
import me.wcy.router.Response
import me.wcy.router.ResultManager
Expand All @@ -33,7 +33,7 @@ class FragmentXStarter : Fragment(), RouterStarter {

override fun startForResult(
request: Request,
listener: OnRouteResult?
listener: OnRouteResultListener?
) {
val context = request.context()
val client = CRouter.getRouterClient()
Expand All @@ -51,7 +51,7 @@ class FragmentXStarter : Fragment(), RouterStarter {

private fun realStartActivityForResult(
response: Response,
listener: OnRouteResult?
listener: OnRouteResultListener?
) {
val request = response.request()
val context = request.context()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package me.wcy.router.starter

import me.wcy.router.OnRouteResult
import me.wcy.router.OnRouteResultListener
import me.wcy.router.Request

/**
Expand All @@ -12,6 +12,6 @@ interface RouterStarter {

fun startForResult(
request: Request,
listener: OnRouteResult?
listener: OnRouteResultListener?
)
}
6 changes: 3 additions & 3 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#Wed Dec 09 10:58:04 CST 2020
#Wed Aug 10 11:09:29 CST 2022
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip
zipStoreBase=GRADLE_USER_HOME
23 changes: 11 additions & 12 deletions sample/src/main/java/me/wcy/crouter/example/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package me.wcy.crouter.example

import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.widget.Button
Expand All @@ -24,8 +23,8 @@ class MainActivity : BaseActivity() {
Toast.makeText(this@MainActivity, "拦截登录", Toast.LENGTH_SHORT).show()
CRouter.with(context)
.url("https://host.com/login.html")
.startForResult { resultCode, data ->
if (resultCode == Activity.RESULT_OK) {
.startForResult { it ->
if (it.isSuccess()) {
callback.invoke()
}
}
Expand All @@ -39,9 +38,9 @@ class MainActivity : BaseActivity() {
button1.setOnClickListener {
CRouter.with(this)
.url("https://host.com/target.html")
.startForResult { resultCode, data ->
if (resultCode == Activity.RESULT_OK && data != null) {
val value = data.extras?.getString("key")
.startForResult { it ->
if (it.isSuccess("key")) {
val value = it.data?.getStringExtra("key")
alert("跳转取值", value)
}
}
Expand All @@ -50,19 +49,19 @@ class MainActivity : BaseActivity() {
CRouter.with(this)
.url("https://host.com/target.html")
.needLogin(true)
.startForResult { resultCode, data ->
if (resultCode == Activity.RESULT_OK && data != null) {
val value = data.extras?.getString("key")
.startForResult { it ->
if (it.isSuccess("key")) {
val value = it.data?.getStringExtra("key")
alert("跳转取值", value)
}
}
}
button3.setOnClickListener {
CRouter.with(this)
.url("https://host.com/fragment/my?key1=value1&key2=value2")
.startForResult { resultCode, data ->
if (resultCode == Activity.RESULT_OK && data != null) {
val value = data.extras?.getString("key")
.startForResult { it ->
if (it.isSuccess("key")) {
val value = it.data?.getStringExtra("key")
alert("跳转取值", value)
}
}
Expand Down

0 comments on commit 48f8d8c

Please sign in to comment.