18034727885
2026-06-20 05a9ff09aa111defc224431e502e27728a038ccb
集成离线推送SDK
修复问题
2个文件已添加
22个文件已修改
239 ■■■■■ 已修改文件
app/build.gradle.kts 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/proguard-rules.pro 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/AndroidManifest.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/MyApp.kt 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/ui/task/selectCar/SelectCarActivity.kt 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/ui/user/mine/set/SetActivity.kt 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/ui/widget/ClearEditText.kt 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/ui/work/car/detail/dispatch/DispatchFragment.kt 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/ui/work/car/detail/operations/repair/RepairCarActivity.kt 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_car_manage.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_find_psw.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_login.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_select_car.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_site_nav.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_mine.xml 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_task.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xhdpi/icon_close_gray.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values/colors.xml 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
common/src/main/java/com/xw/common/CommonDialog.kt 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
common/src/main/java/com/xw/common/TimeDialog.kt 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
common/src/main/java/com/xw/common/utils/BindUtils.kt 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
common/src/main/res/layout/layout_empty_view2.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
gradle/libs.versions.toml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
settings.gradle.kts 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/build.gradle.kts
@@ -28,6 +28,20 @@
            abiFilters.addAll(listOf("arm64-v8a", "armeabi-v7a"))//, "x86", "x86_64"
        }
        vectorDrawables.useSupportLibrary = true
        // 华为
        manifestPlaceholders["PUSH_HW_CLIENT_ID"] = "117680933"
        manifestPlaceholders["PUSH_HW_CLIENT_SECRET"] = "1c18a9c784ff6e47242af5a60e3d22c658b0d76757ede5ba4e15ee329cab8d4a"
        // 荣耀
        manifestPlaceholders["PUSH_RY_APP_ID"] = "104570357"
        manifestPlaceholders["PUSH_RY_APP_SECRET"] = "67f554e43f744e89fed9d09ca21c0cfa584665ba56af0d6f46c11af2434e577d"
        // VIVO
        manifestPlaceholders["PUSH_VV_APP_ID"] = "106095676"
        manifestPlaceholders["PUSH_VV_APP_KEY"] = "27f39e188ef0acce7fd7de80dc9edb55"
        manifestPlaceholders["PUSH_VV_APP_SECRET"] = "23a58cd0-9a17-418c-bdcc-236fafe8692a"
        // OPPO
        buildConfigField("String", "PUSH_OP_APP_KEY", "\"3a308dc2996f44b78400f0e48500616d\"")
        buildConfigField("String", "PUSH_OP_APP_SECRET", "\"dbc906a01ff944009482d2b4cc549563\"")
    }
    signingConfigs {
@@ -161,14 +175,18 @@
    testImplementation(libs.junit)
    androidTestImplementation(libs.androidx.junit)
    androidTestImplementation(libs.androidx.espresso.core)
    implementation(libs.alicloud)
    implementation(libs.alicloud.android.third.push)
    implementation(libs.alicloud.android.third.push.huawei)
    implementation(libs.shadowLayout)
    implementation(project(":common"))
    implementation(libs.dialog.pickerview)
    implementation(libs.huawei.agconnect.core)
    implementation(libs.jsoup)
    implementation(libs.alicloud)
    implementation(libs.alicloud.android.third.push)
    implementation(libs.alicloud.android.third.push.huawei)
    implementation(libs.alicloud.android.third.push.honor)
    implementation(libs.alicloud.android.third.push.oppo)
    implementation(libs.alicloud.android.third.push.vivo)
}
app/proguard-rules.pro
@@ -21,4 +21,20 @@
#-renamesourcefileattribute SourceFile
# 华为通道
-keep class com.huawei.** {*;}
-dontwarn com.huawei.**
-dontwarn com.huawei.**
# 荣耀通道
-ignorewarnings
-keepattributes *Annotation*
-keepattributes Exceptions
-keepattributes InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable
-keep class com.hihonor.push.**{*;}
# OPPO通道
-keep public class * extends android.app.Service
# VIVO通道
-keep class com.vivo.** {*;}
-dontwarn com.vivo.**
app/src/main/AndroidManifest.xml
@@ -193,7 +193,18 @@
        </provider>
        <meta-data
            android:name="com.huawei.hms.client.appid"
            android:value="appid=117680933" />
            android:value="appid=${PUSH_HW_CLIENT_ID}" />
        <!-- 荣耀推送通道 -->
        <meta-data
            android:name="com.hihonor.push.app_id"
            android:value="${PUSH_RY_APP_ID}" />
        <!-- VIVO推送通道 -->
        <meta-data
            android:name="com.vivo.push.api_key"
            android:value="${PUSH_VV_APP_KEY}" />
        <meta-data
            android:name="com.vivo.push.app_id"
            android:value="${PUSH_VV_APP_ID}" />
        <activity
            android:name=".push.PopupPushActivity"
            android:exported="true">
app/src/main/java/com/xw/yunwei/MyApp.kt
@@ -13,9 +13,12 @@
import androidx.lifecycle.MutableLiveData
import com.alibaba.sdk.android.push.CloudPushService
import com.alibaba.sdk.android.push.CommonCallback
import com.alibaba.sdk.android.push.HonorRegister
import com.alibaba.sdk.android.push.huawei.HuaWeiRegister
import com.alibaba.sdk.android.push.noonesdk.PushInitConfig
import com.alibaba.sdk.android.push.noonesdk.PushServiceFactory
import com.alibaba.sdk.android.push.register.OppoRegister
import com.alibaba.sdk.android.push.register.VivoRegister
import com.amap.api.location.AMapLocationClient
import com.amap.api.maps.MapsInitializer
import com.amap.api.navi.NaviSetting
@@ -246,7 +249,15 @@
        pushService.register(this, object : CommonCallback {
            override fun onSuccess(success: String) {
                LogUtils.i("zmc-push", "初始化成功,设备ID: " + pushService.deviceId)
                // 注册各厂商推送通道(会自动判断设备是否支持,不支持则跳过)
                HuaWeiRegister.register(myApp)
                HonorRegister.register(myApp)
                OppoRegister.register(
                    myApp,
                    BuildConfig.PUSH_OP_APP_KEY,
                    BuildConfig.PUSH_OP_APP_SECRET
                )
                VivoRegister.register(myApp)
            }
            override fun onFailed(errorCode: String, errorMessage: String) {
@@ -342,6 +353,9 @@
                                if (currentShowActivity is BaseActivity<*, *>) {
                                    ttsManager.setVideoText("您收到一条${if (taskModel.isAccidentTask()) "事故任务" else "任务指派"},请及时处理!")
                                    VibrateUtils.vibratePattern()
                                    if (taskModel.isAccidentTask()) {
                                        return@collect
                                    }
                                    showNewTaskDialog(currentShowActivity, taskModel)
                                }
                            }
app/src/main/java/com/xw/yunwei/ui/task/selectCar/SelectCarActivity.kt
@@ -42,7 +42,7 @@
    /** 空数据提示视图,懒加载创建 */
    val emptyView by lazy {
        BindUtils.getEmptyView(this, "暂无符合条件的车辆")
        BindUtils.getEmptyView2(this, "暂无符合条件的车辆")
    }
    /** 车辆列表适配器 */
app/src/main/java/com/xw/yunwei/ui/user/mine/set/SetActivity.kt
@@ -101,11 +101,15 @@
        }
        binding.logOut.setOnClickListener {
            CommonDialog.showCommonTipsDialog(this, "确认退出当前账号登录吗?", leftBlock = {
                it.dismiss()
            }, rightBlock = {
                viewModel.loginOut(it)
            })
            CommonDialog.showCommonTipsDialog(
                this, "确认退出当前账号登录吗?",
                cancelable = false,
                cancelOnTouchOutside = false,
                leftBlock = {
                    it.dismiss()
                }, rightBlock = {
                    viewModel.loginOut(it)
                })
        }
    }
app/src/main/java/com/xw/yunwei/ui/widget/ClearEditText.kt
@@ -72,9 +72,6 @@
            val wrapped = DrawableCompat.wrap(it)
            if (iconTint != null) {
                DrawableCompat.setTintList(wrapped, iconTint)
            } else {
                // 默认使用 hint 文字颜色
                DrawableCompat.setTintList(wrapped, hintTextColors)
            }
            wrapped
        }
@@ -190,8 +187,6 @@
            val wrapped = DrawableCompat.wrap(it)
            if (iconTint != null) {
                DrawableCompat.setTintList(wrapped, iconTint)
            } else {
                DrawableCompat.setTintList(wrapped, hintTextColors)
            }
            wrapped
        }
app/src/main/java/com/xw/yunwei/ui/work/car/detail/dispatch/DispatchFragment.kt
@@ -6,7 +6,6 @@
import com.xw.common.custom.SlideButtonView.Companion.DIRECTION_LEFT
import com.xw.common.custom.SlideButtonView.Companion.DIRECTION_RIGHT
import com.xw.common.utils.BindUtils.getResColor
import com.xw.common.utils.BindUtils.getUrl
import com.xw.common.viewAdapter.ImageDefault
import com.xw.common.viewAdapter.ViewAdapter
import com.xw.yunwei.R
@@ -45,8 +44,8 @@
        super.setListener()
        with(binding.slideView1) {
            setOnSlideCompleteListener {
                viewModel.carInfo.value?.also { it ->
                    val setStatus = if (it.operatingStatus == 1) 3 else 1
                viewModel.carInfo.value?.also { carModel ->
                    val setStatus = if (carModel.operatingStatus == 1) 3 else 1
                    if (setStatus == 3) {
                        viewModel.getAllAcceptCarPoints(error = {
                            binding.slideView1.animateReset()
@@ -70,7 +69,7 @@
                                        } else if (getSlideDirection() == DIRECTION_LEFT) {
                                            resetSlideView(this, DIRECTION_RIGHT, "右滑发车")
                                        }
                                        viewModel.checkCould()
                                        viewModel.queryInfo()
                                    }
                                })
                        }
@@ -86,7 +85,7 @@
                        } else if (getSlideDirection() == DIRECTION_LEFT) {
                            resetSlideView(this, DIRECTION_RIGHT, "右滑发车")
                        }
                        viewModel.checkCould()
                        viewModel.queryInfo()
                    }
                }
            }
@@ -141,6 +140,9 @@
        )
        binding.batteryView.setLevel(it.currentElectricity ?: 0)
        ViewAdapter.loadImage(binding.icon, ImageDefault(it.getShowVehiclePicture(), R.mipmap.img_work_car1))
        ViewAdapter.loadImage(
            binding.icon,
            ImageDefault(it.getShowVehiclePicture(), R.mipmap.img_work_car1)
        )
    }
}
app/src/main/java/com/xw/yunwei/ui/work/car/detail/operations/repair/RepairCarActivity.kt
@@ -21,6 +21,7 @@
import com.xw.yunwei.databinding.ActivityCarRepairBinding
import com.xw.yunwei.model.CarModel
import com.xw.yunwei.utils.PictureSelectorFactory
import java.util.Calendar
/**
 * 车辆维修
@@ -28,7 +29,7 @@
class RepairCarActivity : BaseBusinessActivity<ActivityCarRepairBinding, RepairCarVM>() {
    override fun getBindingVariable() = BR.viewModel
     val dialogTime: TimeDialog by lazy { TimeDialog(this) }
    val dialogTime: TimeDialog by lazy { TimeDialog(this) }
    override fun init() {
        super.init()
@@ -49,8 +50,8 @@
            }
        }
        viewModel.carInfo.observe(this) { initBasicInfo(it) }
        viewModel.repairRecord.observe(this){
            if(it.status == 2){
        viewModel.repairRecord.observe(this) {
            if (it.status == 2) {
                it.xpVehicleRepair?.startRepairPicture?.let {
                    val list = it.getUrls().map { FileSelectBean(url = it, type = "img") }
                    viewModel.adapters[0].setList(list)
@@ -63,7 +64,9 @@
        super.setListener()
        binding.layoutSend.startTimeContainer.setOnClickListener {
            val showTime = getTime(viewModel.startTime.value)
            val minTime = getTime("2020-01-01")
            val minTime = Calendar.getInstance().apply {
                add(Calendar.DAY_OF_MONTH, -7)
            }.timeInMillis
            dialogTime.show("选择日期", showTime, minTime) {
                val selectTime = getTime(it)
                if (!viewModel.endTime.value.isNullOrEmpty()) {
@@ -166,7 +169,7 @@
    // 拍照
    private fun takeAPhotograph() {
        PictureSelectorFactory.takeAPhotograph(this,resultCallbackListener)
        PictureSelectorFactory.takeAPhotograph(this, resultCallbackListener)
    }
    private var resultCallbackListener = object : OnResultCallbackListener<LocalMedia> {
@@ -176,11 +179,12 @@
                dataList.addAll(viewModel.adapters[viewModel.operateIndex].data)
                for (item in selectList) {
                    val path: String = item.availablePath
                    var imgPath = if (PictureMimeType.isContent(path) && !item.isCut && !item.isCompressed) {
                        UriUtils.uri2File(Uri.parse(path)).absolutePath
                    } else {
                        path
                    }
                    var imgPath =
                        if (PictureMimeType.isContent(path) && !item.isCut && !item.isCompressed) {
                            UriUtils.uri2File(Uri.parse(path)).absolutePath
                        } else {
                            path
                        }
                    dataList.add(FileSelectBean(localPath = imgPath, type = "img"))
                }
                viewModel.adapters[viewModel.operateIndex].setList(dataList)
app/src/main/res/layout/activity_car_manage.xml
@@ -70,9 +70,10 @@
                    android:drawableStart="@drawable/svg_search"
                    android:drawablePadding="@dimen/dp_10"
                    android:hint="请输入车牌号"
                    app:iconHeight="@dimen/dp_15"
                    app:iconWidth="@dimen/dp_15"
                    app:clearIcon="@mipmap/ic_close_black2"
                    app:iconHeight="@dimen/dp_18"
                    android:maxLength="8"
                    app:iconWidth="@dimen/dp_18"
                    app:clearIcon="@mipmap/icon_close_gray"
                    android:imeOptions="actionSearch"
                    android:paddingHorizontal="@dimen/dp_10"
                    android:singleLine="true"
app/src/main/res/layout/activity_find_psw.xml
@@ -49,10 +49,10 @@
            android:background="@null"
            android:gravity="center_vertical"
            android:hint="手机号"
            app:iconHeight="@dimen/dp_15"
            app:iconWidth="@dimen/dp_15"
            app:iconHeight="@dimen/dp_18"
            app:iconWidth="@dimen/dp_18"
            app:iconMarginRight="@dimen/dp_10"
            app:clearIcon="@mipmap/ic_close_black2"
            app:clearIcon="@mipmap/icon_close_gray"
            android:inputType="phone"
            android:text="@={viewModel.phone}"
            android:textColor="@color/gray_10"
app/src/main/res/layout/activity_login.xml
@@ -67,15 +67,15 @@
            android:background="@null"
            android:gravity="center_vertical"
            android:hint="手机号"
            app:iconHeight="@dimen/dp_15"
            app:iconWidth="@dimen/dp_15"
            app:iconMarginRight="@dimen/dp_10"
            app:clearIcon="@mipmap/ic_close_black2"
            android:inputType="phone"
            android:text="@={viewModel.phone}"
            android:textColor="@color/gray_10"
            android:textColorHint="@color/gray_6"
            android:textSize="@dimen/sp_14"
            app:iconHeight="@dimen/dp_18"
            app:iconWidth="@dimen/dp_18"
            app:iconMarginRight="@dimen/dp_10"
            app:clearIcon="@mipmap/icon_close_gray"
            app:layout_constraintTop_toBottomOf="@+id/tabLayout" />
        <View
@@ -161,9 +161,9 @@
            android:layout_marginTop="@dimen/dp_12"
            android:onClick="@{viewModel.onClick}"
            android:text="忘记密码"
            android:visibility="gone"
            android:textColor="@color/gray_6"
            android:textSize="@dimen/sp_12"
            android:visibility="gone"
            app:layout_constraintEnd_toEndOf="@+id/psw"
            app:layout_constraintTop_toBottomOf="@+id/psw" />
@@ -178,13 +178,15 @@
            android:textSize="@dimen/sp_16"
            android:textStyle="bold"
            app:cornerRadius="@dimen/dp_4"
            app:layout_constraintTop_toBottomOf="@+id/forgetPsw" />
            app:layout_constraintTop_toBottomOf="@+id/forgetPsw"
            app:layout_goneMarginTop="@dimen/dp_56" />
        <androidx.appcompat.widget.AppCompatImageView
            android:id="@+id/protocolStatus"
            selected="@{viewModel.protocolStatus}"
            android:layout_width="@dimen/dp_20"
            android:layout_height="@dimen/dp_20"
            android:layout_marginStart="@dimen/sp_10"
            android:onClick="@{viewModel.onClick}"
            android:src="@drawable/selector_protocol_status"
            app:layout_constraintStart_toStartOf="@+id/phone"
@@ -195,13 +197,13 @@
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="@dimen/dp_4"
            android:layout_marginEnd="@dimen/dp_10"
            android:layout_marginBottom="@dimen/dp_42"
            android:justificationMode="inter_character"
            android:textSize="@dimen/sp_14"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toRightOf="@+id/protocolStatus"
            app:layout_constraintRight_toRightOf="@+id/phone"
            tools:text="我已阅读并同意《用户协议》《隐私协议》" />
            tools:text="我已阅读并同意《用户协议》《隐私协议》《隐私协议》" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>
app/src/main/res/layout/activity_select_car.xml
@@ -69,9 +69,9 @@
                    android:drawablePadding="@dimen/dp_10"
                    android:hint="请输入车牌号"
                    android:maxLength="8"
                    app:iconHeight="@dimen/dp_15"
                    app:iconWidth="@dimen/dp_15"
                    app:clearIcon="@mipmap/ic_close_black2"
                    app:iconHeight="@dimen/dp_18"
                    app:iconWidth="@dimen/dp_18"
                    app:clearIcon="@mipmap/icon_close_gray"
                    android:imeOptions="actionSearch"
                    android:paddingHorizontal="@dimen/dp_10"
                    android:singleLine="true"
app/src/main/res/layout/activity_site_nav.xml
@@ -89,9 +89,9 @@
                    android:drawableStart="@drawable/svg_search"
                    android:drawablePadding="@dimen/dp_10"
                    android:hint="请输入站点名称"
                    app:iconHeight="@dimen/dp_15"
                    app:iconWidth="@dimen/dp_15"
                    app:clearIcon="@mipmap/ic_close_black2"
                    app:iconHeight="@dimen/dp_18"
                    app:iconWidth="@dimen/dp_18"
                    app:clearIcon="@mipmap/icon_close_gray"
                    android:imeOptions="actionSearch"
                    android:paddingHorizontal="@dimen/dp_10"
                    android:singleLine="true"
app/src/main/res/layout/fragment_mine.xml
@@ -255,7 +255,6 @@
                                android:text="@{viewModel.clockTime}"
                                android:textColor="@color/gray_9"
                                android:textSize="@dimen/sp_12"
                                android:textStyle="bold"
                                tools:text="2026-09-21 09:00~17:00" />
                        </LinearLayout>
app/src/main/res/layout/fragment_task.xml
@@ -90,15 +90,16 @@
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                app:iconHeight="@dimen/dp_15"
                app:iconWidth="@dimen/dp_15"
                app:clearIcon="@mipmap/ic_close_black2"
                app:iconHeight="@dimen/dp_18"
                app:iconWidth="@dimen/dp_18"
                app:clearIcon="@mipmap/icon_close_gray"
                android:background="@drawable/shape_white_bg_4"
                android:drawableStart="@mipmap/ic_search_task"
                android:drawablePadding="@dimen/dp_6"
                android:ellipsize="end"
                android:gravity="center_vertical"
                android:hint="请输入车牌号"
                android:maxLength="8"
                android:imeOptions="actionSearch"
                android:orientation="horizontal"
                android:paddingHorizontal="@dimen/dp_8"
app/src/main/res/mipmap-xhdpi/icon_close_gray.png
app/src/main/res/values/colors.xml
@@ -26,4 +26,5 @@
    <color name="color_00006be1">#00006be1</color>
    <color name="color_e5f0fc">#e5f0fc</color>
    <color name="color_0256ff">#0256ff</color>
    <color name="color_ec5340">#ec5340</color>
</resources>
common/src/main/java/com/xw/common/CommonDialog.kt
@@ -65,6 +65,8 @@
        content: String,
        leftText: String? = "取消",
        rightText: String? = "确定",
        cancelable: Boolean = true,
        cancelOnTouchOutside: Boolean = true,
        leftBlock: (MaterialDialog) -> Unit = { },
        rightBlock: (MaterialDialog) -> Unit = { }
    ) {
@@ -77,7 +79,8 @@
                    R.layout.dialog_confirm, noVerticalPadding = true, dialogWrapContent = false
                )
                cancelable(true)
                cancelable(cancelable)
                cancelOnTouchOutside(cancelOnTouchOutside)
                cornerRadius(15f)
                val tvContent = findViewById<AppCompatTextView>(R.id.content)
common/src/main/java/com/xw/common/TimeDialog.kt
@@ -132,8 +132,9 @@
    private fun initDays(days: Int) {
        dayDataList.clear()
        val dayStart = if (minYear == showYear && minMouth == showMouth) minDay.toInt() else 1
        val dayEnd = if ("$maxYear" == showYear && "$maxMouth" == showMouth) maxDay else days
        val dayStart =
            if (minYear.toInt() == showYear.toInt() && minMouth.toInt() == showMouth.toInt()) minDay.toInt() else 1
        val dayEnd = if (maxYear == showYear.toInt() && maxMouth == showMouth.toInt()) maxDay else days
        for (i in dayStart..dayEnd) {
//            dayDataList.add("${if (i < 10) "0$i" else i}日")
            dayDataList.add("${i}日")
common/src/main/java/com/xw/common/utils/BindUtils.kt
@@ -5,12 +5,13 @@
import android.view.LayoutInflater
import android.view.View
import androidx.databinding.DataBindingUtil
import com.xw.common.BuildConfig
import androidx.databinding.ObservableField
import androidx.databinding.OnRebindCallback
import androidx.databinding.ViewDataBinding
import androidx.lifecycle.LiveData
import com.xw.common.BuildConfig
import com.xw.common.R
import com.xw.common.databinding.LayoutEmptyView2Binding
import com.xw.common.databinding.LayoutEmptyViewBinding
import com.xw.common.databinding.LayoutFootViewBinding
import org.json.JSONArray
@@ -24,6 +25,14 @@
@SuppressLint("DefaultLocale")
object BindUtils {
    fun getEmptyView2(context: Context, tips: String = "空空如也~"): View {
        val itemBind = DataBindingUtil.inflate<LayoutEmptyView2Binding>(
            LayoutInflater.from(context), R.layout.layout_empty_view2, null, false
        )
        itemBind.tips.text = tips
        return itemBind.root
    }
    fun getEmptyView(context: Context, tips: String = "空空如也~"): View {
        val itemBind = DataBindingUtil.inflate<LayoutEmptyViewBinding>(
            LayoutInflater.from(context), R.layout.layout_empty_view, null, false
common/src/main/res/layout/layout_empty_view2.xml
New file
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
    </data>
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <androidx.appcompat.widget.AppCompatTextView
            android:id="@+id/tips"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/dp_80"
            android:gravity="center"
            android:text="暂无搜索结果"
            android:textColor="@color/gray_7"
            android:textSize="@dimen/sp_14" />
    </FrameLayout>
</layout>
gradle/libs.versions.toml
@@ -113,13 +113,18 @@
# 腾讯bugly
crashreport = { module = "com.tencent.bugly:crashreport", version.ref = "crashreport" }
nativecrashreport = { module = "com.tencent.bugly:nativecrashreport", version.ref = "crashreport" }
alicloud = { module = "com.aliyun.ams:alicloud-android-push", version.ref = "alicloud" }
alicloud-android-third-push = { module = "com.aliyun.ams:alicloud-android-third-push", version.ref = "alicloud" }
alicloud-android-third-push-huawei = { module = "com.aliyun.ams:alicloud-android-third-push-huawei", version.ref = "alicloud" }
shadowLayout = { module = "com.github.lihangleo2:ShadowLayout", version.ref = "shadowLayout" }
huawei-agconnect-core = { module = "com.huawei.agconnect:agconnect-core", version.ref = "huawei" }
jsoup = { module = "org.jsoup:jsoup", version.ref = "jsoup" }
# 阿里云推送及厂商
alicloud = { module = "com.aliyun.ams:alicloud-android-push", version.ref = "alicloud" }
alicloud-android-third-push = { module = "com.aliyun.ams:alicloud-android-third-push", version.ref = "alicloud" }
alicloud-android-third-push-huawei = { module = "com.aliyun.ams:alicloud-android-third-push-huawei", version.ref = "alicloud" }
alicloud-android-third-push-honor = { module = "com.aliyun.ams:alicloud-android-third-push-honor", version.ref = "alicloud" }
alicloud-android-third-push-oppo = { module = "com.aliyun.ams:alicloud-android-third-push-oppo", version.ref = "alicloud" }
alicloud-android-third-push-vivo = { module = "com.aliyun.ams:alicloud-android-third-push-vivo", version.ref = "alicloud" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
android-library = { id = "com.android.library", version.ref = "agp" }
settings.gradle.kts
@@ -37,7 +37,8 @@
        maven("https://maven.aliyun.com/nexus/content/repositories/releases/")
        // 配置HMS Core SDK的Maven仓地址,集成华为通道需要。
        maven("https://developer.huawei.com/repo/")
        // 荣耀开发者 Maven 仓库,集成荣耀推送通道需要。
        maven("https://developer.hihonor.com/repo")
    }
}