18034727885
2026-09-04 0635d28fe9c8cfe59eda6b077abf9abf665147e0
适配Android16
升级版本号
31个文件已修改
215 ■■■■■ 已修改文件
app/build.gradle 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/igo/user/ui/crosscity/ChooseLineActivity.kt 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/igo/user/ui/crosscity/CrossCityFragment.kt 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/igo/user/ui/login/BindPhoneActivity.kt 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/igo/user/ui/login/ForgetActivity.kt 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/igo/user/ui/login/LoginActivity.kt 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/igo/user/ui/logistics/LogisticsFragment.kt 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/igo/user/ui/mine/ModifyPhoneActivity.kt 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/igo/user/ui/mine/VerifyPhoneForUpdatePwdActivity.kt 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/igo/user/ui/trip/MapTripFragment.kt 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/igo/user/ui/trip/OrderDetailActivity.kt 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/igo/user/ui/trip/OrderDetailWithMapActivity.kt 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/igo/user/ui/trip/TripActivity.kt 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/igo/user/utils/recaptcha/MainActivityViewModel.kt 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/igo/user/utils/recaptcha/RecaptchaJavascriptChannel.kt 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/igo/user/utils/recaptcha/RecaptchaListener.kt 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/igo/user/utils/recaptcha/RecaptchaVisual.kt 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/igo/user/utils/recaptcha/RecaptchaVisualException.kt 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/igo/user/utils/recaptcha/RecaptchaVisualFragment.kt 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/igo/user/utils/recaptcha/RecaptchaWebView.kt 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
download/build.gradle 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rxnetty/build.gradle 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rxnetty/src/main/java/cn/sinata/rxnetty/netStatus/NetStateReceiver.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
umeng_sdk/build.gradle 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xldutils-kotlin/build.gradle 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xldutils-kotlin/src/main/java/cn/sinata/xldutils/activity/BaseActivity.kt 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xldutils-kotlin/src/main/java/cn/sinata/xldutils/activity/SelectPhotoDialog.kt 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xldutils-kotlin/src/main/java/cn/sinata/xldutils/utils/Extends.kt 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xldutils-kotlin/src/main/java/cn/sinata/xldutils/utils/StringKt.kt 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xldutils-kotlin/src/main/java/cn/sinata/xldutils/utils/UtilKt.kt 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xldutils-kotlin/src/main/java/cn/sinata/xldutils/view/TitleBar.kt 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/build.gradle
@@ -4,8 +4,8 @@
apply plugin: 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
android {
    compileSdkVersion 35
    buildToolsVersion "33.0.3"
    compileSdkVersion 36
    buildToolsVersion "36.0.0"
    namespace "com.igo.user"
    //签名
    signingConfigs {
@@ -20,9 +20,9 @@
    defaultConfig {
        applicationId "com.gopost.user"
        minSdkVersion 23
        targetSdkVersion 35
        versionCode 27
        versionName "1.27"
        targetSdkVersion 36
        versionCode 28
        versionName "1.28"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
@@ -146,7 +146,6 @@
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    api "androidx.appcompat:appcompat:$support_version"
    implementation 'androidx.core:core-ktx:1.3.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1")
@@ -158,7 +157,7 @@
    //  androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    // androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    implementation project(path: ':xldutils-kotlin')
    implementation 'com.google.android.material:material:1.3.0-alpha01'
    implementation 'com.google.android.material:material:1.10.0'
    implementation project(path: ':rxnetty')
//    implementation project(path: ':umeng_sdk')
    implementation 'com.youth.banner:banner:2.0.11'
@@ -169,7 +168,7 @@
    implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.3.7'//二维码
    implementation 'com.haibin:calendarview:3.6.9'//日历
    implementation project(path: ':download')
    implementation 'com.google.android.libraries.places:places:2.7.0'
    implementation 'com.google.android.libraries.places:places:3.0.0'
    implementation 'com.facebook.android:facebook-share:12.2.0' //脸书分享
    implementation 'com.facebook.android:facebook-login:12.2.0' //脸书登录
    implementation 'com.twitter.sdk.android:twitter:3.1.1'
@@ -179,7 +178,7 @@
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs_nio:2.0.3'
    //谷歌地图和乘客端sdk
    implementation 'com.google.android.gms:play-services-maps:18.1.0'
    implementation 'com.google.android.gms:play-services-maps:20.0.0'
    implementation 'com.google.android.libraries.mapsplatform.transportation:transportation-consumer:3.0.0'
app/src/main/java/com/igo/user/ui/crosscity/ChooseLineActivity.kt
@@ -5,6 +5,8 @@
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.os.Build
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.recyclerview.widget.LinearLayoutManager
import cn.sinata.xldutils.view.SwipeRefreshRecyclerLayout
import com.igo.user.R
@@ -29,7 +31,11 @@
    private val isScan by lazy { //是否扫码下单
        intent.getBooleanExtra("isScan",false)
    }
    private var receiver: BroadcastReceiver? = null
    private var receiver: BroadcastReceiver =  object :BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            finish()
        }
    }
    override fun initClick() {
        adapter.setOnItemClickListener { view, position ->
@@ -51,17 +57,12 @@
        lvLine.setLayoutManager(LinearLayoutManager(this))
        lvLine.setMode(SwipeRefreshRecyclerLayout.Mode.None)
        lvLine.setAdapter(adapter)
        receiver = object :BroadcastReceiver() {
            override fun onReceive(context: Context?, intent: Intent?) {
                finish()
            }
        }
        registerReceiver(receiver, IntentFilter("crossOrderSuccess"))
        LocalBroadcastManager.getInstance(this).registerReceiver(receiver, IntentFilter("crossOrderSuccess"))
    }
    override fun onDestroy() {
        LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver)
        super.onDestroy()
        if (receiver!=null)
            unregisterReceiver(receiver)
    }
}
app/src/main/java/com/igo/user/ui/crosscity/CrossCityFragment.kt
@@ -11,16 +11,8 @@
    private var endId:Int? = null //到达站点
    private var startCity = ""
    private var endCity = ""
    private var receiver:BroadcastReceiver? = null
    override fun onFirstVisibleToUser() {
    }
    override fun onDestroy() {
        super.onDestroy()
        if (receiver!=null)
            activity?.unregisterReceiver(receiver)
    }
}
app/src/main/java/com/igo/user/ui/login/BindPhoneActivity.kt
@@ -15,19 +15,14 @@
import cn.sinata.xldutils.utils.optInt
import cn.sinata.xldutils.utils.optString
import cn.sinata.xldutils.utils.showAllowingStateLoss
import com.google.recaptcha.sample.RecaptchaVisual
import com.google.recaptcha.sample.RecaptchaVisualException
import com.igo.user.utils.recaptcha.RecaptchaVisualException
import com.igo.user.R
import com.igo.user.dialog.ImageCodeDialog
import com.igo.user.dialog.SingleWheelDialog
import com.igo.user.interfaces.StringCallback
import com.igo.user.network.HttpManager
import com.igo.user.network.request
import com.igo.user.ui.TransparentStatusBarActivity
import com.igo.user.ui.login.LoginActivity.Companion.BASE_URL
import com.igo.user.ui.login.LoginActivity.Companion.WEB_SITE_KEY
import com.igo.user.utils.Const
import com.twitter.sdk.android.core.TwitterAuthConfig
import kotlinx.coroutines.launch
import org.jetbrains.anko.find
import org.jetbrains.anko.startActivityForResult
app/src/main/java/com/igo/user/ui/login/ForgetActivity.kt
@@ -7,20 +7,15 @@
import android.widget.EditText
import android.widget.TextView
import androidx.activity.viewModels
import androidx.core.os.bundleOf
import androidx.lifecycle.lifecycleScope
import cn.sinata.xldutils.utils.LengthFilter
import cn.sinata.xldutils.utils.isValidPhone
import cn.sinata.xldutils.utils.myToast
import com.google.recaptcha.sample.RecaptchaVisual
import com.google.recaptcha.sample.RecaptchaVisualException
import com.igo.user.utils.recaptcha.RecaptchaVisualException
import com.igo.user.R
import com.igo.user.dialog.ImageCodeDialog
import com.igo.user.network.HttpManager
import com.igo.user.network.request
import com.igo.user.ui.TransparentStatusBarActivity
import com.igo.user.ui.login.LoginActivity.Companion.BASE_URL
import com.igo.user.ui.login.LoginActivity.Companion.WEB_SITE_KEY
import com.igo.user.utils.DisableSpaceInputFilter
import kotlinx.coroutines.launch
import org.jetbrains.anko.find
app/src/main/java/com/igo/user/ui/login/LoginActivity.kt
@@ -7,7 +7,6 @@
import MainActivityViewModel
import android.app.Activity
import android.content.Intent
import android.net.Uri
import android.os.CountDownTimer
import android.util.Log
import android.view.View
@@ -42,7 +41,7 @@
import com.google.android.gms.common.ConnectionResult
import com.google.android.gms.common.GoogleApiAvailability
import com.google.android.gms.recaptcha.RecaptchaClient
import com.google.recaptcha.sample.RecaptchaVisualException
import com.igo.user.utils.recaptcha.RecaptchaVisualException
import com.igo.user.BuildConfig
import com.igo.user.R
import com.igo.user.dialog.SingleWheelDialog
app/src/main/java/com/igo/user/ui/logistics/LogisticsFragment.kt
@@ -301,7 +301,7 @@
                )
                uiSettings.isMyLocationButtonEnabled = false
                setOnMyLocationChangeListener {
                    Log.e(Const.Tag, "物流:lat:" + it.latitude + ",lon:" + it.longitude)
                    Log.e(Const.Tag, "当前定位:lat:" + it.latitude + ",lon:" + it.longitude)
                    IGoApplication.setLocation(it.latitude, it.longitude)
//                IGoApplication.address = it.address
//                IGoApplication.cityCode = it.extras.getString("adcode")?:""
app/src/main/java/com/igo/user/ui/mine/ModifyPhoneActivity.kt
@@ -12,8 +12,7 @@
import cn.sinata.xldutils.utils.isValidPhone
import cn.sinata.xldutils.utils.myToast
import cn.sinata.xldutils.utils.showAllowingStateLoss
import com.google.recaptcha.sample.RecaptchaVisual
import com.google.recaptcha.sample.RecaptchaVisualException
import com.igo.user.utils.recaptcha.RecaptchaVisualException
import com.igo.user.IGoApplication.Companion.phone
import com.igo.user.R
import com.igo.user.dialog.SingleWheelDialog
@@ -23,8 +22,6 @@
import com.igo.user.network.request
import com.igo.user.ui.TransparentStatusBarActivity
import com.igo.user.ui.login.AreaCodeActivity
import com.igo.user.ui.login.LoginActivity.Companion.BASE_URL
import com.igo.user.ui.login.LoginActivity.Companion.WEB_SITE_KEY
import kotlinx.coroutines.launch
import org.jetbrains.anko.find
import org.jetbrains.anko.sdk27.coroutines.onClick
app/src/main/java/com/igo/user/ui/mine/VerifyPhoneForUpdatePwdActivity.kt
@@ -9,7 +9,7 @@
import cn.sinata.xldutils.utils.hidePhone
import cn.sinata.xldutils.utils.myToast
import cn.sinata.xldutils.utils.optInt
import com.google.recaptcha.sample.RecaptchaVisualException
import com.igo.user.utils.recaptcha.RecaptchaVisualException
import com.igo.user.IGoApplication
import com.igo.user.R
import com.igo.user.extension.extIsEmptyOrNull
app/src/main/java/com/igo/user/ui/trip/MapTripFragment.kt
@@ -479,7 +479,7 @@
                isMyLocationEnabled = true
                uiSettings.isMyLocationButtonEnabled = false
                setOnMyLocationChangeListener {
                    Log.e(Const.Tag, "出租车:lat:" + it.latitude + ",lon:" + it.longitude)
                    Log.e(Const.Tag, "当前定位:lat:" + it.latitude + ",lon:" + it.longitude)
                    IGoApplication.setLocation(it.latitude, it.longitude)
//                IGoApplication.address = it.address
//                IGoApplication.cityCode = it.extras.getString("adcode")?:""
@@ -663,7 +663,7 @@
        hadLoopRefresh = true
        viewLifecycleOwner.lifecycleScope.launch {
            while (true) {
                delay(5000)
                delay(10_000)
                getDriverNum { _, data ->
                    val i = data?.optInt("number") ?: 0
                    val t = getString(R.string.当前附近有n辆车可用, i)
app/src/main/java/com/igo/user/ui/trip/OrderDetailActivity.kt
@@ -29,6 +29,8 @@
import cn.sinata.xldutils.utils.optDouble
import cn.sinata.xldutils.utils.optInt
import cn.sinata.xldutils.utils.showAllowingStateLoss
import cn.sinata.xldutils.utils.urlDecode
import cn.sinata.xldutils.utils.urlEncode
import cn.sinata.xldutils.visible
import com.facebook.drawee.view.SimpleDraweeView
import com.igo.user.IGoApplication
@@ -417,6 +419,7 @@
        tv_pay_offline.gone()
        tv_confirm_fee.gone()
        cl_driver.visible()
        tv_action.gone()
        tv_action2.gone()
        when (order?.state) {
            in (1..5) -> {
@@ -442,7 +445,7 @@
                title = getString(R.string.支付费用)
                if (order?.isFrozen != 2) {
                    tv_pay_offline.visible() //新增提示文字
                    tv_action.visible()
                    //tv_action.visible()
                }
                tv_title.visible()
                tv_action.text = getString(R.string.立即支付)
@@ -470,9 +473,7 @@
                    tv_tip.invisible()
                }
                tv_title.hide()
                if (order!!.orderType == TripOrderFragment.TYPE_LOGISTICS) {
                    tv_action.visible()
                }
                tv_action.visible()
                tv_action.text = getString(R.string.匿名评价)
                titleBar.getRightButton(0)?.visible()
                if (order?.isFrozen != 2) {
@@ -524,8 +525,7 @@
                    val view = layoutInflater.inflate(R.layout.item_score_label, null) as CheckBox
                    view.text = it
                    view.isEnabled = false
                    if (it in split)
                        view.isChecked = true
                    view.isChecked = !split.none { checkItem -> checkItem.equals(it, true) }
                    fl_label.addView(view)
                }
                tv_detail.visible()
@@ -841,7 +841,7 @@
//    }
    override fun onStateChanged(id: Int, type: Int, state: Int) {
        if (id == this.id && type == this.type && order?.state == 6) { //当前是待司机确认费用,需要重新获取订单信息
        if (id == this.id && type == this.type && (order?.state == 6 || order?.state == 7 || order?.state == 8)) { //当前是待司机确认费用,需要重新获取订单信息
            getData()
        }
    }
app/src/main/java/com/igo/user/ui/trip/OrderDetailWithMapActivity.kt
@@ -204,8 +204,7 @@
                    val view = layoutInflater.inflate(R.layout.item_score_label, null) as CheckBox
                    view.text = it
                    view.isEnabled = false
                    if (it in split)
                        view.isChecked = true
                    view.isChecked = !split.none { checkItem -> checkItem.equals(it, true) }
                    fl_label.addView(view)
                }
            }
app/src/main/java/com/igo/user/ui/trip/TripActivity.kt
@@ -71,6 +71,7 @@
import com.igo.user.utils.google.JsonAuthTokenFactory
import com.tbruyelle.rxpermissions2.RxPermissions
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.launch
import org.jetbrains.anko.dip
import org.jetbrains.anko.find
@@ -82,12 +83,22 @@
class TripActivity : BaseActivity(), Handler.Callback,
    OrderStateChangeListener {
    var aMap: ConsumerGoogleMap? = null
    private val noticeCancelFlow = MutableSharedFlow<Boolean>()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_trip)
        initView()
        initClick()
        lifecycleScope.launch(Dispatchers.Main) {
            repeatOnLifecycle(Lifecycle.State.RESUMED) {
                noticeCancelFlow.collect {
                    if (noResponseDialog.dialog?.isShowing != true) {
                        noResponseDialog.show(supportFragmentManager, "noResponse")
                        LogHelper.logRecord("显示超时无应答弹窗orderId:${id} orderType:${type}")
                    }
                }
            }
        }
    }
    private val app by lazy {
@@ -741,17 +752,11 @@
     * 超时无应答
     */
    fun noResponse(id: Int) {
        if (isFinishing || isDestroyed) {
        if (isFinishing || isDestroyed || id != this.id) {
            return
        }
        lifecycleScope.launch(Dispatchers.Main) {
            // 等待生命周期至少达到 RESUMED(即 onResume 之后)
            if (id == this@TripActivity.id && !noResponseDialog.isAdded) {
                repeatOnLifecycle(Lifecycle.State.RESUMED) {
                    noResponseDialog.show(supportFragmentManager, "noResponse")
                    LogHelper.logRecord("显示超时无应答弹窗orderId:${id} orderType:${type}")
                }
            }
        lifecycleScope.launch {
            noticeCancelFlow.emit(true)
        }
    }
@@ -1093,6 +1098,10 @@
        NettyClient.getInstance().checkNettyState()
    }
    override fun finish() {
        IGoApplication.tripId = ""
        super.finish()
    }
    override fun onDestroy() {
        handler.removeMessages(0)
@@ -1100,15 +1109,14 @@
        handler.removeMessages(2)
        handler.removeMessages(3)
        app.removeTripStateListener(this)
        IGoApplication.tripId = ""
        session?.stop()
        super.onDestroy()
    }
    override fun onBackPressed() {
        if (ll_progress.visibility == View.VISIBLE)
    override fun onBackPressHandle() {
        if (ll_progress.isVisible)
            ll_progress.gone()
        else
            super.onBackPressed()
            super.onBackPressHandle()
    }
}
app/src/main/java/com/igo/user/utils/recaptcha/MainActivityViewModel.kt
@@ -19,7 +19,7 @@
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
import com.google.recaptcha.sample.RecaptchaVisualException
import com.igo.user.utils.recaptcha.RecaptchaVisualException
import kotlinx.coroutines.launch
class MainActivityViewModel(
app/src/main/java/com/igo/user/utils/recaptcha/RecaptchaJavascriptChannel.kt
@@ -1,4 +1,4 @@
package com.google.recaptcha.sample
package com.igo.user.utils.recaptcha
import android.webkit.JavascriptInterface
app/src/main/java/com/igo/user/utils/recaptcha/RecaptchaListener.kt
@@ -1,4 +1,4 @@
package com.google.recaptcha.sample
package com.igo.user.utils.recaptcha
interface RecaptchaListener {
  fun onLoad()
app/src/main/java/com/igo/user/utils/recaptcha/RecaptchaVisual.kt
@@ -1,4 +1,4 @@
package com.google.recaptcha.sample
package com.igo.user.utils.recaptcha
import androidx.fragment.app.FragmentManager
import java.util.Locale
@@ -15,7 +15,7 @@
    fun runCaptcha(): Deferred<String> {
        onDone = CompletableDeferred()
        val fragment = RecaptchaVisualFragment.newInstance(siteKey, baseUrl, lang)
        val fragment = RecaptchaVisualFragment.Companion.newInstance(siteKey, baseUrl, lang)
        fragment.configure(this)
        fragment.show(fragmentManager, "RecaptchaVisual")
        return onDone
app/src/main/java/com/igo/user/utils/recaptcha/RecaptchaVisualException.kt
@@ -1,4 +1,4 @@
package com.google.recaptcha.sample
package com.igo.user.utils.recaptcha
class RecaptchaVisualException : Exception {
  constructor() : super()
app/src/main/java/com/igo/user/utils/recaptcha/RecaptchaVisualFragment.kt
@@ -1,4 +1,4 @@
package com.google.recaptcha.sample
package com.igo.user.utils.recaptcha
import android.annotation.SuppressLint
import android.app.Dialog
@@ -18,9 +18,9 @@
    fun newInstance(siteKey: String, baseUrl: String, lang: String?): RecaptchaVisualFragment {
      val f = RecaptchaVisualFragment()
      val args = Bundle()
      args.putString(RecaptchaWebView.SITE_KEY, siteKey)
      args.putString(RecaptchaWebView.BASE_URL, baseUrl)
      args.putString(RecaptchaWebView.LANG, lang)
      args.putString(RecaptchaWebView.Companion.SITE_KEY, siteKey)
      args.putString(RecaptchaWebView.Companion.BASE_URL, baseUrl)
      args.putString(RecaptchaWebView.Companion.LANG, lang)
      f.arguments = args
      return f
    }
app/src/main/java/com/igo/user/utils/recaptcha/RecaptchaWebView.kt
@@ -1,4 +1,4 @@
package com.google.recaptcha.sample
package com.igo.user.utils.recaptcha
import android.content.Context
import android.os.Bundle
download/build.gradle
@@ -1,12 +1,12 @@
apply plugin: 'com.android.library'
android {
    compileSdkVersion 28
    compileSdkVersion 36
    namespace "com.sinata.download"
    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 28
        targetSdkVersion 36
    }
    buildTypes {
rxnetty/build.gradle
@@ -1,12 +1,12 @@
apply plugin: 'com.android.library'
android {
    compileSdkVersion 35
    compileSdkVersion 36
    namespace "cn.sinata.rxnetty"
    defaultConfig {
        minSdkVersion 23
        targetSdkVersion 35
        targetSdkVersion 36
    }
@@ -24,8 +24,9 @@
dependencies {
    api fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.google.android.material:material:1.10.0'
    implementation 'androidx.appcompat:appcompat:1.6.1'
    api 'io.reactivex:rxnetty:0.4.20'
    api 'androidx.appcompat:appcompat:1.1.0'
    api 'io.netty:netty-buffer:4.1.5.Final'
    api 'io.netty:netty-handler:4.1.5.Final'
    api 'io.reactivex:rxandroid:1.2.1'
rxnetty/src/main/java/cn/sinata/rxnetty/netStatus/NetStateReceiver.java
@@ -13,6 +13,7 @@
import android.os.Looper;
import androidx.annotation.RequiresApi;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import java.util.ArrayList;
import java.util.List;
@@ -73,7 +74,7 @@
            IntentFilter filter = new IntentFilter();
            filter.addAction(CUSTOM_ANDROID_NET_CHANGE_ACTION);
            filter.addAction(ANDROID_NET_CHANGE_ACTION);
            mAppContext.registerReceiver(getReceiver(), filter);
            LocalBroadcastManager.getInstance(mAppContext).registerReceiver(getReceiver(), filter);
        }
        updateNetworkState(mAppContext);
    }
@@ -110,7 +111,7 @@
        }
        if (mBroadcastReceiver != null) {
            try {
                appContext.unregisterReceiver(mBroadcastReceiver);
                LocalBroadcastManager.getInstance(appContext).unregisterReceiver(mBroadcastReceiver);
            } catch (Exception e) {
                e.printStackTrace();
            }
@@ -219,7 +220,7 @@
        filter.addAction(ANDROID_NET_CHANGE_ACTION);
        try {
            // 使用应用上下文注册广播,避免持有服务实例 由AI生成
            context.getApplicationContext().registerReceiver(getReceiver(), filter);
            LocalBroadcastManager.getInstance(context.getApplicationContext()).registerReceiver(getReceiver(), filter);
        } catch (Exception e) {
            // 注册失败时输出异常,避免影响长连接服务启动 由AI生成
            e.printStackTrace();
umeng_sdk/build.gradle
@@ -1,12 +1,12 @@
apply plugin: 'com.android.library'
android {
    compileSdkVersion 29
    compileSdkVersion 36
    namespace "com.umeng.sdk"
    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 28
        targetSdkVersion 36
    }
    buildTypes {
        release {
xldutils-kotlin/build.gradle
@@ -2,12 +2,12 @@
apply plugin: 'kotlin-android'
android {
    compileSdkVersion 33
    compileSdkVersion 36
    namespace "cn.sinata.xldutils"
    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 29
        targetSdkVersion 36
    }
    buildTypes {
        release {
xldutils-kotlin/src/main/java/cn/sinata/xldutils/activity/BaseActivity.kt
@@ -12,6 +12,7 @@
import android.view.Window
import android.view.inputmethod.InputMethodManager
import android.widget.EditText
import androidx.activity.OnBackPressedCallback
import androidx.appcompat.app.AppCompatActivity
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import cn.sinata.xldutils.R
@@ -67,8 +68,16 @@
            closeSelfBroadcastReceiver,
            IntentFilter(ACTION_CLOSE_ALL)
        )
        onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
            override fun handleOnBackPressed() {
                onBackPressHandle()
            }
        })
    }
    protected open fun onBackPressHandle() {
        finish()
    }
    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
xldutils-kotlin/src/main/java/cn/sinata/xldutils/activity/SelectPhotoDialog.kt
@@ -105,7 +105,7 @@
//        }
        //取消
        find<TextView>(R.id.tv_cancel).onClick {
            onBackPressed()
            onBackPressHandle()
        }
    }
@@ -137,7 +137,7 @@
                        val intent = Intent()
                        intent.putExtra(PATH, tempFile!!.absolutePath)
                        setResult(RESULT_OK, intent)
                        onBackPressed()
                        onBackPressHandle()
                        overridePendingTransition(0, 0)
                    }
                }
xldutils-kotlin/src/main/java/cn/sinata/xldutils/utils/Extends.kt
@@ -1,7 +1,6 @@
package cn.sinata.xldutils.utils
import android.content.Context
import android.view.Gravity
import android.view.LayoutInflater
import android.widget.TextView
import android.widget.Toast
@@ -19,12 +18,12 @@
    ft.commitAllowingStateLoss()
}
fun Fragment.myToast(text: CharSequence, longTime:Boolean=false) = activity?.myToast(text,longTime)
fun Fragment.myToast(text: CharSequence, longTime: Boolean = false) = activity?.myToast(text, longTime)
fun Context.myToast(message: CharSequence,longTime:Boolean=false) {
fun Context.myToast(message: CharSequence, longTime: Boolean = false) {
    val toast = Toast(this)
    toast.duration = if (longTime)Toast.LENGTH_LONG else Toast.LENGTH_SHORT
    toast.setGravity(Gravity.CENTER, 0, 0)
    toast.duration = if (longTime) Toast.LENGTH_LONG else Toast.LENGTH_SHORT
//    toast.setGravity(Gravity.CENTER, 0, 0)
    val toastLayout = LayoutInflater.from(this).inflate(R.layout.layout_center_toast, null)
    val txtToast: TextView = toastLayout.findViewById(R.id.txt_toast)
    txtToast.text = message
xldutils-kotlin/src/main/java/cn/sinata/xldutils/utils/StringKt.kt
@@ -42,14 +42,24 @@
 * urlEncode
 */
fun String?.urlEncode(): String {
    return if (isNullOrEmpty()) "" else URLEncoder.encode(this, "utf-8")
    return if (isNullOrEmpty()) "" else try {
        URLEncoder.encode(this, "utf-8")
    }catch (e: Exception){
        e.printStackTrace()
        this
    }
}
/**
 * urlDecode
 */
fun String?.urlDecode(): String {
    return if (isNullOrEmpty()) "" else URLDecoder.decode(this, "utf-8")
    return if (isNullOrEmpty()) "" else try {
        URLDecoder.decode(this, "utf-8")
    }catch (e: Exception){
        e.printStackTrace()
        this
    }
}
/**
xldutils-kotlin/src/main/java/cn/sinata/xldutils/utils/UtilKt.kt
@@ -144,7 +144,7 @@
    return try {
        val manager = this.packageManager
        val info = manager.getPackageInfo(this.packageName, 0)
        info.versionName
        info.versionName!!
    } catch (e: Exception) {
        e.printStackTrace()
        "--"
xldutils-kotlin/src/main/java/cn/sinata/xldutils/view/TitleBar.kt
@@ -86,7 +86,7 @@
        titleView.backgroundDrawable = null
        //默认左键点击关闭页面
        leftView.setOnClickListener {
            (context as Activity).onBackPressed()
            (context as Activity).finish()
        }
    }