liangjingkanji / Net

Android 基于协程/OkHttp网络请求工具
http://liangjingkanji.github.io/Net/
MIT License
1.9k stars 214 forks source link

update 优化 `scopeDialog` 兼容性 #89

Closed TxcA closed 2 years ago

TxcA commented 2 years ago

androidx.activity.ComponentActivity 上已支持生命周期管理,所以创建scopeDialog时不一定必须使用FragmentActivity

优化后的好处: 目前只发现了纯Compose项目,默认不implementation "androidx.appcompat:appcompat:x.x.x",且默认Activity是继承于androidx.activity.ComponentActivitysetContent{ }也是基于androidx.activity.ComponentActivity扩展。所以也算是对Compose的兼容吧。

虽然Compsoe也可以引入appcompat来兼容这个问题,但是纯Compose项目似乎不需要appcompat.

Compose setContent 扩展截取

import androidx.activity.ComponentActivity
...

public fun ComponentActivity.setContent(
    parent: CompositionContext? = null,
    content: @Composable () -> Unit
) {
    val existingComposeView = window.decorView
        .findViewById<ViewGroup>(android.R.id.content)
        .getChildAt(0) as? ComposeView
...
liangjingkanji commented 2 years ago

要求马上发布吗?

TxcA commented 2 years ago

可以不用,这个需求目前覆盖率应该很低。 我这边刚弄完测试的时候本地打有aar,而且也只是一个demo项目。

liangjingkanji commented 2 years ago

那我合并到dev去, 你可以直接在jitpack找到自己fork的仓库使用commit-hash生成远程依赖来立即使用(比aar简单)

TxcA commented 2 years ago

👌

liangjingkanji commented 2 years ago

你可以修改到dev吗? 我合并到dev并不会影响本次pr

TxcA commented 2 years ago

x 我看dev 已经合并进去了,改不了😂

liangjingkanji commented 2 years ago

我回退了, 你再试下

TxcA commented 2 years ago

3.4.10 弄丢了...😂

liangjingkanji commented 2 years ago

我丢弃的, 因为考虑到会导致存在破坏性迁移 目前而言适配Compose是不是过早, 而且相对的自动化请求应该会都失效吧

我觉得新开分支适配Compose是不是更好, 亦或最终发布4.0版本

liangjingkanji commented 2 years ago

我已经新开分支compose-beta, 直接在这上面适配Compose吧

TxcA commented 2 years ago

androidx.activity.ComponentActivityandroidx.fragment.app.FragmentActivity的父类,何来破坏性迁移... 😂我难道会为了一个覆盖率基本等于0的需求去破坏当前接近100%覆盖率的需求, 去提一个PR吗 ..

liangjingkanji commented 2 years ago

编译器报错都算是破坏性迁移吧, 这已经涉及到函数参数类型变更了

TxcA commented 2 years ago

问题这个参数是个receiver, 既然能在FragmentActivity里调用, 那么做为他的父类ComponentActivity, 调用范围是扩散而不是收拢吧.

类似于这样, 肯定是没有任何问题的.

    fun start(activity: FragmentActivity) {
        operation(activity)
    }

    fun operation(activity: ComponentActivity) {
        //
    }

由于这个PR的覆盖率的确很低, PR不重要, 讨论下这个点上的意见. 我看下我是不是少想了哪一点...

liangjingkanji commented 2 years ago

很多人实现了NetDialogFactory, 这个构造器使用的就是scopeDialog的接受者

TxcA commented 2 years ago

的确,如果是继承实现NetDialogFactory,的确会存在需要修改参数类型,存在破坏性迁移的问题。一直用的lambda没注意到是个接口。 这块的确有一定影响,那就先不管它了。

liangjingkanji commented 2 years ago

我考虑到这个改动作用也不是很大, 就丢弃了本想和你说一声忘了

我使用接口来实现也是为了避免产生复杂的lambda代码

liangjingkanji commented 2 years ago

我还没使用Compose, 后续如果你有关于Compose相关适配可以提交到compose-beta分支

使用开发者变多我不得不尽量避免破坏性迁移, 在命名和代码方面的确显得很吃力, 但是我又希望仓库修复问题足够及时所以频繁发布版本

只能希望有更多人参与审核和贡献了, 仓库越开越多, 修复bug和需求已经有点跟不上进度了

TxcA commented 2 years ago

这块没事,我以为是不小心force了。而且也是我没注意到是个接口,考虑不周。

对于单人维护那么多仓,你的回复及修复速度已经很快了。 有时候蛮佩服你的精力的,早休息~